summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/parser')
-rw-r--r--core/fpdfapi/parser/cpdf_parser.cpp19
-rw-r--r--core/fpdfapi/parser/cpdf_parser.h9
2 files changed, 19 insertions, 9 deletions
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index eb59195aa2..657d0e0865 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1068,19 +1068,24 @@ bool CPDF_Parser::LoadCrossRefV5(FX_FILESIZE* pos, bool bMainXRef) {
if (GetObjectType(startnum + j) != ObjectType::kFree)
continue;
- m_ObjectInfo[startnum + j].type = type;
+ ObjectInfo& info = m_ObjectInfo[startnum + j];
+
+ info.type = type;
if (type == ObjectType::kFree) {
- m_ObjectInfo[startnum + j].pos = 0;
+ info.pos = 0;
} else {
- FX_FILESIZE offset =
+ const FX_FILESIZE entry_value =
GetVarInt(entrystart + WidthArray[0], WidthArray[1]);
- m_ObjectInfo[startnum + j].pos = offset;
if (type == ObjectType::kNotCompressed) {
- m_SortedOffset.insert(offset);
+ const auto object_offset = entry_value;
+ m_SortedOffset.insert(object_offset);
+ info.pos = object_offset;
} else {
- if (offset < 0 || !IsValidObjectNumber(offset))
+ const auto archive_obj_num = entry_value;
+ info.archive_obj_num = archive_obj_num;
+ if (archive_obj_num < 0 || !IsValidObjectNumber(archive_obj_num))
return false;
- m_ObjectInfo[offset].type = ObjectType::kNull;
+ m_ObjectInfo[archive_obj_num].type = ObjectType::kNull;
}
}
}
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index 4d78d7052f..ece1e6a2d4 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -111,8 +111,13 @@ class CPDF_Parser {
protected:
struct ObjectInfo {
ObjectInfo() : pos(0), type(ObjectType::kFree), gennum(0) {}
-
- FX_FILESIZE pos;
+ // if type is ObjectType::kCompressed the archive_obj_num should be used.
+ // if type is ObjectType::kNotCompressed the pos should be used.
+ // In other cases its are unused.
+ union {
+ FX_FILESIZE pos;
+ FX_FILESIZE archive_obj_num;
+ };
ObjectType type;
uint16_t gennum;
};