Improve readability in CPDF_Parser::ObjectInfo.
Make CPDF_Parser::ObjectInfo::pos a union, since the data is used as an
object number when the object is compressed.
Change-Id: Id7c32759f7411cc80285bb7f3088b5aa6ff5bf05
Reviewed-on: https://pdfium-review.googlesource.com/9570
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index eb59195..657d0e0 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -1068,19 +1068,24 @@
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 4d78d70..ece1e6a 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -111,8 +111,13 @@
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;
};