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;
   };