Tidy some CPDF_CrossRefTable:: nested class usage.

-- Remove CPDF_Parser:: "typedefs" for CPDF_CrossRefTable objects
from the cpdf_parser.h header, as their fully-qualified used didn't
make it at all clear to this reader that CPDF_Parser::ObjectInfo
was the same as CPDF_CrossRefTable::ObjectInfo.

-- Make ObjectInfo into an aggregate and use designated initializers,

-- Re-arrange members so that type comes first, makes aforementioned
   designated initializers more readable.

Change-Id: I482952f227b119002bac00763d4b6d1a1c384545
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/114550
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_table.h b/core/fpdfapi/parser/cpdf_cross_ref_table.h
index 3c05c49..5fdc415 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_table.h
+++ b/core/fpdfapi/parser/cpdf_cross_ref_table.h
@@ -26,8 +26,8 @@
   };
 
   struct ObjectInfo {
-    ObjectInfo() = default;
-
+    ObjectType type = ObjectType::kFree;
+    uint16_t gennum = 0;
     // If `type` is `ObjectType::kCompressed`, `archive` should be used.
     // If `type` is `ObjectType::kNormal`, `pos` should be used.
     // In other cases, it is unused.
@@ -38,8 +38,6 @@
         uint32_t obj_index;
       } archive;
     };
-    ObjectType type = ObjectType::kFree;
-    uint16_t gennum = 0;
   };
 
   // Merge cross reference tables.  Apply top on current.
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 2a3e07e..c8136e7 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -38,6 +38,9 @@
 #include "third_party/base/containers/span.h"
 #include "third_party/base/notreached.h"
 
+using ObjectType = CPDF_CrossRefTable::ObjectType;
+using ObjectInfo = CPDF_CrossRefTable::ObjectInfo;
+
 namespace {
 
 // A limit on the size of the xref table. Theoretical limits are higher, but
@@ -60,17 +63,16 @@
   uint32_t obj_count;
 };
 
-CPDF_Parser::ObjectType GetObjectTypeFromCrossRefStreamType(
-    uint32_t cross_ref_stream_type) {
+ObjectType GetObjectTypeFromCrossRefStreamType(uint32_t cross_ref_stream_type) {
   switch (cross_ref_stream_type) {
     case 0:
-      return CPDF_Parser::ObjectType::kFree;
+      return ObjectType::kFree;
     case 1:
-      return CPDF_Parser::ObjectType::kNormal;
+      return ObjectType::kNormal;
     case 2:
-      return CPDF_Parser::ObjectType::kCompressed;
+      return ObjectType::kCompressed;
     default:
-      return CPDF_Parser::ObjectType::kNull;
+      return ObjectType::kNull;
   }
 }
 
@@ -178,7 +180,7 @@
   return (info && info->type == ObjectType::kNormal) ? info->pos : 0;
 }
 
-CPDF_Parser::ObjectType CPDF_Parser::GetObjectType(uint32_t objnum) const {
+ObjectType CPDF_Parser::GetObjectType(uint32_t objnum) const {
   DCHECK(IsValidObjectNumber(objnum));
   const auto* info = m_CrossRefTable->GetObjectInfo(objnum);
   return info ? info->type : ObjectType::kFree;
@@ -875,8 +877,9 @@
     const uint32_t cross_ref_stream_obj_type =
         GetFirstXRefStreamEntry(entry_span, field_widths);
     type = GetObjectTypeFromCrossRefStreamType(cross_ref_stream_obj_type);
-    if (type == ObjectType::kNull)
+    if (type == ObjectType::kNull) {
       return;
+    }
   } else {
     // Per ISO 32000-1:2008 table 17, use the default value of 1 for the xref
     // stream entry when it is not specified. The `type` assignment is the
@@ -1002,10 +1005,11 @@
       return nullptr;
     return ParseIndirectObjectAt(pos, objnum);
   }
-  if (GetObjectType(objnum) != ObjectType::kCompressed)
+  if (GetObjectType(objnum) != ObjectType::kCompressed) {
     return nullptr;
+  }
 
-  const ObjectInfo& info = *m_CrossRefTable->GetObjectInfo(objnum);
+  const auto& info = *m_CrossRefTable->GetObjectInfo(objnum);
   const CPDF_ObjectStream* pObjStream = GetObjectStream(info.archive.obj_num);
   if (!pObjStream)
     return nullptr;
@@ -1024,8 +1028,9 @@
     return it->second.get();
 
   const auto* info = m_CrossRefTable->GetObjectInfo(object_number);
-  if (!info || info->type != ObjectType::kObjStream)
+  if (!info || info->type != ObjectType::kObjStream) {
     return nullptr;
+  }
 
   const FX_FILESIZE object_pos = info->pos;
   if (object_pos <= 0)
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index abda2c5..a2d429c 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -36,9 +36,6 @@
 
 class CPDF_Parser {
  public:
-  using ObjectType = CPDF_CrossRefTable::ObjectType;
-  using ObjectInfo = CPDF_CrossRefTable::ObjectInfo;
-
   class ParsedObjectsHolder : public CPDF_IndirectObjectHolder {
    public:
     virtual bool TryInit() = 0;
@@ -143,7 +140,7 @@
 
   struct CrossRefObjData {
     uint32_t obj_num = 0;
-    ObjectInfo info;
+    CPDF_CrossRefTable::ObjectInfo info;
   };
 
   bool LoadAllCrossRefV4(FX_FILESIZE xref_offset);
@@ -178,7 +175,7 @@
   bool InitSyntaxParser(RetainPtr<CPDF_ReadValidator> validator);
   bool ParseFileVersion();
 
-  ObjectType GetObjectType(uint32_t objnum) const;
+  CPDF_CrossRefTable::ObjectType GetObjectType(uint32_t objnum) const;
 
   std::unique_ptr<CPDF_SyntaxParser> m_pSyntax;
   std::unique_ptr<ParsedObjectsHolder> m_pOwnedObjectsHolder;
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index addff1f..801217f 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -29,10 +29,10 @@
 
 namespace {
 
-CPDF_Parser::ObjectInfo GetObjInfo(const CPDF_Parser& parser,
-                                   uint32_t obj_num) {
+CPDF_CrossRefTable::ObjectInfo GetObjInfo(const CPDF_Parser& parser,
+                                          uint32_t obj_num) {
   const auto* info = parser.GetCrossRefTable()->GetObjectInfo(obj_num);
-  return info ? *info : CPDF_Parser::ObjectInfo();
+  return info ? *info : CPDF_CrossRefTable::ObjectInfo();
 }
 
 class TestObjectsHolder final : public CPDF_Parser::ParsedObjectsHolder {
@@ -48,8 +48,8 @@
 }  // namespace
 
 // Test-only helper to support Gmock. Cannot be in an anonymous namespace.
-bool operator==(const CPDF_Parser::ObjectInfo& lhs,
-                const CPDF_Parser::ObjectInfo& rhs) {
+bool operator==(const CPDF_CrossRefTable::ObjectInfo& lhs,
+                const CPDF_CrossRefTable::ObjectInfo& rhs) {
   if (lhs.type != rhs.type) {
     return false;
   }
@@ -59,14 +59,14 @@
   }
 
   switch (lhs.type) {
-    case CPDF_Parser::ObjectType::kFree:
+    case CPDF_CrossRefTable::ObjectType::kFree:
       return true;
-    case CPDF_Parser::ObjectType::kNormal:
+    case CPDF_CrossRefTable::ObjectType::kNormal:
       return lhs.pos == rhs.pos;
-    case CPDF_Parser::ObjectType::kCompressed:
+    case CPDF_CrossRefTable::ObjectType::kCompressed:
       return lhs.archive.obj_num == rhs.archive.obj_num &&
              lhs.archive.obj_index == rhs.archive.obj_index;
-    case CPDF_Parser::ObjectType::kObjStream:
+    case CPDF_CrossRefTable::ObjectType::kObjStream:
       return false;
   }
 }
@@ -74,20 +74,20 @@
 // Test-only helper to let Gmock pretty-print `info`. Cannot be in an anonymous
 // namespace.
 std::ostream& operator<<(std::ostream& os,
-                         const CPDF_Parser::ObjectInfo& info) {
+                         const CPDF_CrossRefTable::ObjectInfo& info) {
   os << "(";
   switch (info.type) {
-    case CPDF_Parser::ObjectType::kFree:
+    case CPDF_CrossRefTable::ObjectType::kFree:
       os << "Free object";
       break;
-    case CPDF_Parser::ObjectType::kNormal:
+    case CPDF_CrossRefTable::ObjectType::kNormal:
       os << "Normal object, pos: " << info.pos;
       break;
-    case CPDF_Parser::ObjectType::kCompressed:
+    case CPDF_CrossRefTable::ObjectType::kCompressed:
       os << "Compressed object, archive obj_num: " << info.archive.obj_num
          << ", archive obj_index: " << info.archive.obj_index;
       break;
-    case CPDF_Parser::ObjectType::kObjStream:
+    case CPDF_CrossRefTable::ObjectType::kObjStream:
       os << "ObjectStream object";
       break;
   }
@@ -186,13 +186,13 @@
 
     ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
     static const FX_FILESIZE kOffsets[] = {0, 17, 81, 0, 331, 409};
-    static const CPDF_TestParser::ObjectType kTypes[] = {
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kNormal};
+    static const CPDF_CrossRefTable::ObjectType kTypes[] = {
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kNormal};
     static_assert(std::size(kOffsets) == std::size(kTypes),
                   "kOffsets / kTypes size mismatch");
     for (size_t i = 0; i < std::size(kOffsets); ++i) {
@@ -219,20 +219,20 @@
     ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
     static const FX_FILESIZE kOffsets[] = {0, 0,     0,     25325, 0, 0,    0,
                                            0, 25518, 25635, 0,     0, 25777};
-    static const CPDF_TestParser::ObjectType kTypes[] = {
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal};
+    static const CPDF_CrossRefTable::ObjectType kTypes[] = {
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal};
     static_assert(std::size(kOffsets) == std::size(kTypes),
                   "kOffsets / kTypes size mismatch");
     for (size_t i = 0; i < std::size(kOffsets); ++i) {
@@ -259,20 +259,20 @@
     ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
     static const FX_FILESIZE kOffsets[] = {0, 0, 0,     25325, 0, 0,    0,
                                            0, 0, 25635, 0,     0, 25777};
-    static const CPDF_TestParser::ObjectType kTypes[] = {
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal};
+    static const CPDF_CrossRefTable::ObjectType kTypes[] = {
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal};
     static_assert(std::size(kOffsets) == std::size(kTypes),
                   "kOffsets / kTypes size mismatch");
     for (size_t i = 0; i < std::size(kOffsets); ++i) {
@@ -297,14 +297,14 @@
 
     ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
     static const FX_FILESIZE kOffsets[] = {0, 23, 0, 0, 0, 45, 179};
-    static const CPDF_TestParser::ObjectType kTypes[] = {
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kFree,
-        CPDF_TestParser::ObjectType::kNormal,
-        CPDF_TestParser::ObjectType::kNormal};
+    static const CPDF_CrossRefTable::ObjectType kTypes[] = {
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kFree,
+        CPDF_CrossRefTable::ObjectType::kNormal,
+        CPDF_CrossRefTable::ObjectType::kNormal};
     static_assert(std::size(kOffsets) == std::size(kTypes),
                   "kOffsets / kTypes size mismatch");
     for (size_t i = 0; i < std::size(kOffsets); ++i) {
@@ -332,7 +332,7 @@
     ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
     for (size_t i = 0; i < 2048; ++i) {
       EXPECT_EQ(static_cast<int>(i) + 1, GetObjInfo(parser, i).pos);
-      EXPECT_EQ(CPDF_TestParser::ObjectType::kNormal,
+      EXPECT_EQ(CPDF_CrossRefTable::ObjectType::kNormal,
                 GetObjInfo(parser, i).type);
     }
   }
@@ -464,16 +464,14 @@
 
   // This should be the only object from table. Subsequent objects have object
   // numbers that are too big.
-  CPDF_Parser::ObjectInfo only_valid_object;
-  only_valid_object.type = CPDF_Parser::ObjectType::kNormal;
-  only_valid_object.pos = 0;
+  CPDF_CrossRefTable::ObjectInfo only_valid_object = {
+      .type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 0};
 
   // TODO(thestig): Should the xref table contain object 4194305?
   // Consider reworking CPDF_Parser's object representation to avoid having to
   // store this placeholder object.
-  CPDF_Parser::ObjectInfo placeholder_object;
-  placeholder_object.type = CPDF_Parser::ObjectType::kFree;
-  placeholder_object.pos = 0;
+  CPDF_CrossRefTable::ObjectInfo placeholder_object = {
+      .type = CPDF_CrossRefTable::ObjectType::kFree, .pos = 0};
 
   EXPECT_THAT(objects_info, ElementsAre(Pair(4194303, only_valid_object),
                                         Pair(4194305, placeholder_object)));
@@ -510,11 +508,9 @@
   // The expectation is for the parser to skip over the first object, and
   // continue parsing the remaining objects. So these are the second and third
   // objects.
-  CPDF_Parser::ObjectInfo expected_objects[2];
-  expected_objects[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_objects[0].pos = 15;
-  expected_objects[1].type = CPDF_Parser::ObjectType::kNormal;
-  expected_objects[1].pos = 18;
+  CPDF_CrossRefTable::ObjectInfo expected_objects[2] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 18}};
 
   EXPECT_THAT(objects_info, ElementsAre(Pair(1, expected_objects[0]),
                                         Pair(2, expected_objects[1])));
@@ -644,11 +640,10 @@
   ASSERT_TRUE(parser().GetCrossRefTable());
   const auto& objects_info = parser().GetCrossRefTable()->objects_info();
 
-  CPDF_Parser::ObjectInfo expected_result[2];
-  expected_result[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[0].pos = 15;
-  expected_result[1].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[1].pos = 18;
+  CPDF_CrossRefTable::ObjectInfo expected_result[2] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 18}};
+
   EXPECT_THAT(objects_info, ElementsAre(Pair(0, expected_result[0]),
                                         Pair(1, expected_result[1])));
 }
@@ -683,19 +678,14 @@
   ASSERT_TRUE(parser().GetCrossRefTable());
   const auto& objects_info = parser().GetCrossRefTable()->objects_info();
 
-  CPDF_Parser::ObjectInfo expected_result[6];
-  expected_result[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[0].pos = 0;
-  expected_result[1].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[1].pos = 15;
-  expected_result[2].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[2].pos = 18;
-  expected_result[3].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[3].pos = 32;
-  expected_result[4].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[4].pos = 34;
-  expected_result[5].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[5].pos = 37;
+  CPDF_CrossRefTable::ObjectInfo expected_result[6] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 0},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 18},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 32},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 34},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 37}};
+
   EXPECT_THAT(
       objects_info,
       ElementsAre(Pair(2, expected_result[0]), Pair(4, expected_result[1]),
@@ -730,13 +720,12 @@
   ASSERT_TRUE(parser().GetCrossRefTable());
   const auto& objects_info = parser().GetCrossRefTable()->objects_info();
 
-  CPDF_Parser::ObjectInfo expected_result[2];
-  expected_result[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[0].pos = 0;
-  expected_result[1].type = CPDF_Parser::ObjectType::kNormal;
-  // Since the /Index does not follow the spec, this is one of the 2 possible
-  // values that a parser can come up with.
-  expected_result[1].pos = 15;
+  CPDF_CrossRefTable::ObjectInfo expected_result[2] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 0},
+      // Since the /Index does not follow the spec, this is one of the 2
+      // possible values that a parser can come up with.
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15}};
+
   EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
                                         Pair(3, expected_result[1])));
 }
@@ -769,13 +758,11 @@
   const auto& objects_info = parser().GetCrossRefTable()->objects_info();
 
   // Although the /Index does not follow the spec, the parser tolerates it.
-  CPDF_Parser::ObjectInfo expected_result[3];
-  expected_result[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[0].pos = 18;
-  expected_result[1].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[1].pos = 0;
-  expected_result[2].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[2].pos = 15;
+  CPDF_CrossRefTable::ObjectInfo expected_result[3] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 18},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 0},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15}};
+
   EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
                                         Pair(3, expected_result[1]),
                                         Pair(4, expected_result[2])));
@@ -809,13 +796,11 @@
   ASSERT_TRUE(parser().GetCrossRefTable());
   const auto& objects_info = parser().GetCrossRefTable()->objects_info();
 
-  CPDF_Parser::ObjectInfo expected_result[3];
-  expected_result[0].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[0].pos = 0;
-  expected_result[1].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[1].pos = 15;
-  expected_result[2].type = CPDF_Parser::ObjectType::kNormal;
-  expected_result[2].pos = 18;
+  const CPDF_CrossRefTable::ObjectInfo expected_result[3] = {
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 0},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 15},
+      {.type = CPDF_CrossRefTable::ObjectType::kNormal, .pos = 18}};
+
   EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
                                         Pair(80, expected_result[1]),
                                         Pair(81, expected_result[2])));