Give "V4" and "V5" parser code better names

In CPDF_Parser and related code, there are references to "CrossRefV4"
and "CrossRefV5". But what happened to V3? It turns out V4 means PDF 1.4
and before, where only cross reference tables existed. V5 means PDF 1.5
and later, as the PDF 1.5 spec introduced cross reference stream. With
this in mind, rename "CrossRefV4" to "CrossRefTable" and rename
"CrossRefV5" to "CrossRefStream". For "TrailerV4", simplify that to
"Trailer", as a cross reference stream has a dictionary built-in and
does not need a separate trailer dictionary. i.e. the trailer is only
ever associated with a cross reference table.

Similarly rename variables with "v4" or "v5" in their names. Rename a
few other variables along the way.

Change-Id: I11eb14099cb86401fd42375c31afe5ecf7171e99
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/116291
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp b/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
index 8562e64..b1b4c79 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_cross_ref_avail.cpp
@@ -45,11 +45,11 @@
       case State::kCrossRefCheck:
         check_result = CheckCrossRef();
         break;
-      case State::kCrossRefV4ItemCheck:
-        check_result = CheckCrossRefV4Item();
+      case State::kCrossRefTableItemCheck:
+        check_result = CheckCrossRefTableItem();
         break;
-      case State::kCrossRefV4TrailerCheck:
-        check_result = CheckCrossRefV4Trailer();
+      case State::kCrossRefTableTrailerCheck:
+        check_result = CheckCrossRefTableTrailer();
         break;
       case State::kDone:
         break;
@@ -83,7 +83,7 @@
   if (CheckReadProblems())
     return false;
 
-  const bool result = (first_word == kCrossRefKeyword) ? CheckCrossRefV4()
+  const bool result = (first_word == kCrossRefKeyword) ? CheckCrossRefTable()
                                                        : CheckCrossRefStream();
 
   if (result)
@@ -92,7 +92,7 @@
   return result;
 }
 
-bool CPDF_CrossRefAvail::CheckCrossRefV4() {
+bool CPDF_CrossRefAvail::CheckCrossRefTable() {
   const ByteString keyword = parser_->GetKeyword();
   if (CheckReadProblems())
     return false;
@@ -102,12 +102,12 @@
     return false;
   }
 
-  state_ = State::kCrossRefV4ItemCheck;
+  state_ = State::kCrossRefTableItemCheck;
   offset_ = parser_->GetPos();
   return true;
 }
 
-bool CPDF_CrossRefAvail::CheckCrossRefV4Item() {
+bool CPDF_CrossRefAvail::CheckCrossRefTableItem() {
   parser_->SetPos(offset_);
   const ByteString keyword = parser_->GetKeyword();
   if (CheckReadProblems())
@@ -119,14 +119,14 @@
   }
 
   if (keyword == kTrailerKeyword)
-    state_ = State::kCrossRefV4TrailerCheck;
+    state_ = State::kCrossRefTableTrailerCheck;
 
   // Go to next item.
   offset_ = parser_->GetPos();
   return true;
 }
 
-bool CPDF_CrossRefAvail::CheckCrossRefV4Trailer() {
+bool CPDF_CrossRefAvail::CheckCrossRefTableTrailer() {
   parser_->SetPos(offset_);
 
   RetainPtr<CPDF_Dictionary> trailer =
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_avail.h b/core/fpdfapi/parser/cpdf_cross_ref_avail.h
index 276fab1..c766fad 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_avail.h
+++ b/core/fpdfapi/parser/cpdf_cross_ref_avail.h
@@ -27,16 +27,16 @@
  private:
   enum class State {
     kCrossRefCheck,
-    kCrossRefV4ItemCheck,
-    kCrossRefV4TrailerCheck,
+    kCrossRefTableItemCheck,
+    kCrossRefTableTrailerCheck,
     kDone,
   };
 
   bool CheckReadProblems();
   bool CheckCrossRef();
-  bool CheckCrossRefV4();
-  bool CheckCrossRefV4Item();
-  bool CheckCrossRefV4Trailer();
+  bool CheckCrossRefTable();
+  bool CheckCrossRefTableItem();
+  bool CheckCrossRefTableTrailer();
   bool CheckCrossRefStream();
 
   void AddCrossRefForCheck(FX_FILESIZE crossref_offset);
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_avail_unittest.cpp b/core/fpdfapi/parser/cpdf_cross_ref_avail_unittest.cpp
index 709f77a..660d96f 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_avail_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_cross_ref_avail_unittest.cpp
@@ -21,7 +21,7 @@
 
 }  // namespace
 
-TEST(CrossRefAvailTest, CheckCrossRefV4) {
+TEST(CrossRefAvailTest, CheckCrossRefTable) {
   const unsigned char xref_table[] =
       "xref \n"
       "0 6 \n"
@@ -129,7 +129,7 @@
   EXPECT_EQ(CPDF_DataAvail::kDataError, cross_ref_avail->CheckAvail());
 }
 
-TEST(CrossRefAvailTest, ThreeCrossRefV4) {
+TEST(CrossRefAvailTest, ThreeCrossRefTable) {
   char int_buffer[100];
   std::string table = "pdf blah blah blah\n";
   size_t cur_offset = table.size();
@@ -177,7 +177,7 @@
   EXPECT_EQ(CPDF_DataAvail::kDataAvailable, cross_ref_avail->CheckAvail());
 }
 
-TEST(CrossRefAvailTest, ThreeCrossRefV5) {
+TEST(CrossRefAvailTest, ThreeCrossRefStream) {
   char int_buffer[100];
   std::string table = "pdf blah blah blah\n";
   size_t cur_offset = table.size();
@@ -225,7 +225,7 @@
   char int_buffer[100];
   std::string table = "pdf blah blah blah\n";
 
-  const int first_v5_table_offset = static_cast<int>(table.size());
+  const int first_stream_offset = static_cast<int>(table.size());
   table +=
       "16 0 obj\n"
       "<</Type /XRef>>"
@@ -235,7 +235,7 @@
       "endobj\n";
   table += "Dummy Data jgwhughouiwbahng";
 
-  const int second_v4_table_offset = static_cast<int>(table.size());
+  const int second_table_offset = static_cast<int>(table.size());
   table += std::string(
                "xref \n"
                "0 6 \n"
@@ -246,10 +246,10 @@
                "4f9bb2e7978401808f8f1f2a75c322c8>]"
                "/Info 15 0 R/Size 16"
                "/Prev ") +
-           FXSYS_itoa(first_v5_table_offset, int_buffer, 10) + ">>\n";
+           FXSYS_itoa(first_stream_offset, int_buffer, 10) + ">>\n";
   table += "More Dummy Data jgwhughouiwbahng";
 
-  const int last_v4_table_offset = static_cast<int>(table.size());
+  const int last_table_offset = static_cast<int>(table.size());
   table += std::string(
                "xref \n"
                "0 6 \n"
@@ -260,9 +260,9 @@
                "4f9bb2e7978401808f8f1f2a75c322c8>]"
                "/Info 15 0 R/Size 16"
                "/Prev ") +
-           FXSYS_itoa(second_v4_table_offset, int_buffer, 10) + " /XRefStm " +
-           FXSYS_itoa(first_v5_table_offset, int_buffer, 10) + ">>\n";
-  const FX_FILESIZE last_crossref_offset = last_v4_table_offset;
+           FXSYS_itoa(second_table_offset, int_buffer, 10) + " /XRefStm " +
+           FXSYS_itoa(first_stream_offset, int_buffer, 10) + ">>\n";
+  const FX_FILESIZE last_crossref_offset = last_table_offset;
 
   auto parser = MakeParserForBuffer(pdfium::as_byte_span(table));
   auto cross_ref_avail =
@@ -270,7 +270,7 @@
   EXPECT_EQ(CPDF_DataAvail::kDataAvailable, cross_ref_avail->CheckAvail());
 }
 
-TEST(CrossRefAvailTest, CrossRefV5IsNotStream) {
+TEST(CrossRefAvailTest, CrossRefStreamIsNotStream) {
   const unsigned char invalid_xref_stream[] =
       "16 0 obj\n"
       "[/array /object]\n"
@@ -284,7 +284,7 @@
   EXPECT_EQ(CPDF_DataAvail::kDataError, cross_ref_avail->CheckAvail());
 }
 
-TEST(CrossRefAvailTest, CrossRefV4WithEncryptRef) {
+TEST(CrossRefAvailTest, CrossRefTableWithEncryptRef) {
   const unsigned char xref_table[] =
       "xref \n"
       "0 6 \n"
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 1605a1a..9daa95c 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -195,8 +195,10 @@
       return false;
   }
 
-  if (!m_parser.LoadAllCrossRefV4(m_pCrossRefAvail->last_crossref_offset()) &&
-      !m_parser.LoadAllCrossRefV5(m_pCrossRefAvail->last_crossref_offset())) {
+  if (!m_parser.LoadAllCrossRefTable(
+          m_pCrossRefAvail->last_crossref_offset()) &&
+      !m_parser.LoadAllCrossRefStream(
+          m_pCrossRefAvail->last_crossref_offset())) {
     m_internalStatus = InternalStatus::kLoadAllFile;
     return false;
   }
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index 89a846e..c5a9f98 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -55,10 +55,10 @@
 // dictionary.
 constexpr size_t kMinFieldCount = 3;
 
-// V4 trailers are inline.
-constexpr uint32_t kNoV4TrailerObjectNumber = 0;
+// Trailers are inline.
+constexpr uint32_t kNoTrailerObjectNumber = 0;
 
-struct CrossRefV5IndexEntry {
+struct CrossRefStreamIndexEntry {
   uint32_t start_obj_num;
   uint32_t obj_count;
 };
@@ -104,9 +104,10 @@
       entry_span.subspan(field_widths[0] + field_widths[1], field_widths[2]));
 }
 
-std::vector<CrossRefV5IndexEntry> GetCrossRefV5Indices(const CPDF_Array* array,
-                                                       uint32_t size) {
-  std::vector<CrossRefV5IndexEntry> indices;
+std::vector<CrossRefStreamIndexEntry> GetCrossRefStreamIndices(
+    const CPDF_Array* array,
+    uint32_t size) {
+  std::vector<CrossRefStreamIndexEntry> indices;
   if (array) {
     for (size_t i = 0; i < array->size() / 2; i++) {
       RetainPtr<const CPDF_Number> pStartNumObj = array->GetNumberAt(i * 2);
@@ -249,8 +250,8 @@
 
   m_LastXRefOffset = ParseStartXRef();
   if (m_LastXRefOffset >= kPDFHeaderSize) {
-    if (!LoadAllCrossRefV4(m_LastXRefOffset) &&
-        !LoadAllCrossRefV5(m_LastXRefOffset)) {
+    if (!LoadAllCrossRefTable(m_LastXRefOffset) &&
+        !LoadAllCrossRefStream(m_LastXRefOffset)) {
       if (!RebuildCrossRef())
         return FORMAT_ERROR;
 
@@ -351,7 +352,7 @@
 // In reality, we rarely see well-formed cross references don't match
 // with the objects. crbug/602650 showed a case where object numbers
 // in the cross reference table are all off by one.
-bool CPDF_Parser::VerifyCrossRefV4() {
+bool CPDF_Parser::VerifyCrossRefTable() {
   for (const auto& it : m_CrossRefTable->objects_info()) {
     if (it.second.pos <= 0)
       continue;
@@ -371,15 +372,16 @@
   return true;
 }
 
-bool CPDF_Parser::LoadAllCrossRefV4(FX_FILESIZE xref_offset) {
-  if (!LoadCrossRefV4(xref_offset, true))
+bool CPDF_Parser::LoadAllCrossRefTable(FX_FILESIZE xref_offset) {
+  if (!LoadCrossRefTable(xref_offset, /*skip=*/true)) {
     return false;
+  }
 
-  RetainPtr<CPDF_Dictionary> trailer = LoadTrailerV4();
+  RetainPtr<CPDF_Dictionary> trailer = LoadTrailer();
   if (!trailer)
     return false;
 
-  m_CrossRefTable->SetTrailer(std::move(trailer), kNoV4TrailerObjectNumber);
+  m_CrossRefTable->SetTrailer(std::move(trailer), kNoTrailerObjectNumber);
   const int32_t xrefsize = GetTrailer()->GetDirectIntegerFor("Size");
   if (xrefsize > 0 && xrefsize <= kMaxXRefSize)
     m_CrossRefTable->SetObjectMapSize(xrefsize);
@@ -405,9 +407,9 @@
       xref_list.insert(xref_list.begin(), xref_offset);
 
       // SLOW ...
-      LoadCrossRefV4(xref_offset, true);
+      LoadCrossRefTable(xref_offset, /*skip=*/true);
 
-      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailerV4();
+      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailer();
       if (!trailer_dict) {
         return false;
       }
@@ -419,31 +421,34 @@
       // SLOW ...
       m_CrossRefTable = CPDF_CrossRefTable::MergeUp(
           std::make_unique<CPDF_CrossRefTable>(std::move(trailer_dict),
-                                               kNoV4TrailerObjectNumber),
+                                               kNoTrailerObjectNumber),
           std::move(m_CrossRefTable));
     }
   }
 
   for (size_t i = 0; i < xref_list.size(); ++i) {
-    if (xref_list[i] > 0 && !LoadCrossRefV4(xref_list[i], false))
-      return false;
-
-    if (xref_stream_list[i] > 0 &&
-        !LoadCrossRefV5(&xref_stream_list[i], /*is_main_xref=*/false)) {
+    if (xref_list[i] > 0 && !LoadCrossRefTable(xref_list[i], /*skip=*/false)) {
       return false;
     }
 
-    if (i == 0 && !VerifyCrossRefV4())
+    if (xref_stream_list[i] > 0 &&
+        !LoadCrossRefStream(&xref_stream_list[i], /*is_main_xref=*/false)) {
       return false;
+    }
+
+    if (i == 0 && !VerifyCrossRefTable()) {
+      return false;
+    }
   }
   return true;
 }
 
-bool CPDF_Parser::LoadLinearizedAllCrossRefV4(FX_FILESIZE main_xref_offset) {
-  if (!LoadCrossRefV4(main_xref_offset, false))
+bool CPDF_Parser::LoadLinearizedAllCrossRefTable(FX_FILESIZE main_xref_offset) {
+  if (!LoadCrossRefTable(main_xref_offset, /*skip=*/false)) {
     return false;
+  }
 
-  RetainPtr<CPDF_Dictionary> main_trailer = LoadTrailerV4();
+  RetainPtr<CPDF_Dictionary> main_trailer = LoadTrailer();
   if (!main_trailer)
     return false;
 
@@ -462,7 +467,7 @@
   // Merge the trailers.
   m_CrossRefTable = CPDF_CrossRefTable::MergeUp(
       std::make_unique<CPDF_CrossRefTable>(std::move(main_trailer),
-                                           kNoV4TrailerObjectNumber),
+                                           kNoTrailerObjectNumber),
       std::move(m_CrossRefTable));
 
   // Ignore /Prev for hybrid-reference files.
@@ -481,9 +486,9 @@
       xref_list.insert(xref_list.begin(), xref_offset);
 
       // SLOW ...
-      LoadCrossRefV4(xref_offset, true);
+      LoadCrossRefTable(xref_offset, /*skip=*/true);
 
-      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailerV4();
+      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailer();
       if (!trailer_dict) {
         return false;
       }
@@ -495,22 +500,23 @@
       // SLOW ...
       m_CrossRefTable = CPDF_CrossRefTable::MergeUp(
           std::make_unique<CPDF_CrossRefTable>(std::move(trailer_dict),
-                                               kNoV4TrailerObjectNumber),
+                                               kNoTrailerObjectNumber),
           std::move(m_CrossRefTable));
     }
   }
 
   if (xref_stream_list[0] > 0 &&
-      !LoadCrossRefV5(&xref_stream_list[0], /*is_main_xref=*/false)) {
+      !LoadCrossRefStream(&xref_stream_list[0], /*is_main_xref=*/false)) {
     return false;
   }
 
   for (size_t i = 1; i < xref_list.size(); ++i) {
-    if (xref_list[i] > 0 && !LoadCrossRefV4(xref_list[i], false))
+    if (xref_list[i] > 0 && !LoadCrossRefTable(xref_list[i], /*skip=*/false)) {
       return false;
+    }
 
     if (xref_stream_list[i] > 0 &&
-        !LoadCrossRefV5(&xref_stream_list[i], /*is_main_xref=*/false)) {
+        !LoadCrossRefStream(&xref_stream_list[i], /*is_main_xref=*/false)) {
       return false;
     }
   }
@@ -602,7 +608,8 @@
   return true;
 }
 
-bool CPDF_Parser::ParseCrossRefV4(std::vector<CrossRefObjData>* out_objects) {
+bool CPDF_Parser::ParseCrossRefTable(
+    std::vector<CrossRefObjData>* out_objects) {
   if (out_objects)
     out_objects->clear();
 
@@ -638,11 +645,12 @@
   return true;
 }
 
-bool CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, bool bSkip) {
+bool CPDF_Parser::LoadCrossRefTable(FX_FILESIZE pos, bool skip) {
   m_pSyntax->SetPos(pos);
   std::vector<CrossRefObjData> objects;
-  if (!ParseCrossRefV4(bSkip ? nullptr : &objects))
+  if (!ParseCrossRefTable(skip ? nullptr : &objects)) {
     return false;
+  }
 
   MergeCrossRefObjectsData(objects);
   return true;
@@ -672,8 +680,8 @@
   }
 }
 
-bool CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xref_offset) {
-  if (!LoadCrossRefV5(&xref_offset, /*is_main_xref=*/true)) {
+bool CPDF_Parser::LoadAllCrossRefStream(FX_FILESIZE xref_offset) {
+  if (!LoadCrossRefStream(&xref_offset, /*is_main_xref=*/true)) {
     return false;
   }
 
@@ -681,16 +689,16 @@
   while (xref_offset > 0) {
     seen_xref_offset.insert(xref_offset);
     FX_FILESIZE save_xref_offset = xref_offset;
-    if (!LoadCrossRefV5(&xref_offset, /*is_main_xref=*/false)) {
+    if (!LoadCrossRefStream(&xref_offset, /*is_main_xref=*/false)) {
       // If a cross-reference stream failed to load at `xref_offset`, try
       // loading a cross-reference table at the same location. Use
       // `save_xref_offset` instead of `xref_offset`, as `xref_offset` may have
       // changed.
-      if (!LoadCrossRefV4(save_xref_offset, /*bSkip=*/false)) {
+      if (!LoadCrossRefTable(save_xref_offset, /*skip=*/false)) {
         return false;
       }
 
-      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailerV4();
+      RetainPtr<CPDF_Dictionary> trailer_dict = LoadTrailer();
       if (!trailer_dict) {
         return false;
       }
@@ -789,7 +797,7 @@
   return GetTrailer() && !m_CrossRefTable->objects_info().empty();
 }
 
-bool CPDF_Parser::LoadCrossRefV5(FX_FILESIZE* pos, bool is_main_xref) {
+bool CPDF_Parser::LoadCrossRefStream(FX_FILESIZE* pos, bool is_main_xref) {
   RetainPtr<const CPDF_Stream> pStream =
       ToStream(ParseIndirectObjectAt(*pos, 0));
   if (!pStream || !pStream->GetObjNum()) {
@@ -818,8 +826,8 @@
         std::move(new_cross_ref_table), std::move(m_CrossRefTable));
   }
 
-  std::vector<CrossRefV5IndexEntry> indices =
-      GetCrossRefV5Indices(pDict->GetArrayFor("Index").Get(), size);
+  std::vector<CrossRefStreamIndexEntry> indices =
+      GetCrossRefStreamIndices(pDict->GetArrayFor("Index").Get(), size);
 
   std::vector<uint32_t> field_widths =
       GetFieldWidths(pDict->GetArrayFor("W").Get());
@@ -854,10 +862,10 @@
     }
 
     // Until SetObjectMapSize() below has been called by a prior loop iteration,
-    // `current_size` is based on the /Size value parsed in LoadCrossRefV5().
-    // PDFs may not always have the correct /Size. In this case, other PDF
-    // implementations ignore the incorrect size, and PDFium also ignores
-    // incorrect size in trailers for V4 xrefs.
+    // `current_size` is based on the /Size value parsed in
+    // LoadCrossRefStream(). PDFs may not always have the correct /Size. In this
+    // case, other PDF implementations ignore the incorrect size, and PDFium
+    // also ignores incorrect size in trailers for cross reference tables.
     const uint32_t current_size =
         m_CrossRefTable->objects_info().empty() ? 0 : GetLastObjNum() + 1;
     // So allow `new_size` to be greater than `current_size`, but avoid going
@@ -875,8 +883,8 @@
         break;
       }
 
-      ProcessCrossRefV5Entry(seg_span.subspan(i * total_width, total_width),
-                             field_widths, obj_num);
+      ProcessCrossRefStreamEntry(seg_span.subspan(i * total_width, total_width),
+                                 field_widths, obj_num);
     }
 
     segindex += index.obj_count;
@@ -884,7 +892,7 @@
   return true;
 }
 
-void CPDF_Parser::ProcessCrossRefV5Entry(
+void CPDF_Parser::ProcessCrossRefStreamEntry(
     pdfium::span<const uint8_t> entry_span,
     pdfium::span<const uint32_t> field_widths,
     uint32_t obj_num) {
@@ -1107,7 +1115,7 @@
   m_pLinearized = std::move(pLinearized);
 }
 
-RetainPtr<CPDF_Dictionary> CPDF_Parser::LoadTrailerV4() {
+RetainPtr<CPDF_Dictionary> CPDF_Parser::LoadTrailer() {
   if (m_pSyntax->GetKeyword() != "trailer")
     return nullptr;
 
@@ -1144,20 +1152,22 @@
 
   m_LastXRefOffset = m_pLinearized->GetLastXRefOffset();
   FX_FILESIZE dwFirstXRefOffset = m_LastXRefOffset;
-  bool bLoadV4 = LoadCrossRefV4(dwFirstXRefOffset, false);
-  if (!bLoadV4 && !LoadCrossRefV5(&dwFirstXRefOffset, /*is_main_xref=*/true)) {
+  const bool loaded_xref_table =
+      LoadCrossRefTable(dwFirstXRefOffset, /*skip=*/false);
+  if (!loaded_xref_table &&
+      !LoadCrossRefStream(&dwFirstXRefOffset, /*is_main_xref=*/true)) {
     if (!RebuildCrossRef())
       return FORMAT_ERROR;
 
     m_bXRefTableRebuilt = true;
     m_LastXRefOffset = 0;
   }
-  if (bLoadV4) {
-    RetainPtr<CPDF_Dictionary> trailer = LoadTrailerV4();
+  if (loaded_xref_table) {
+    RetainPtr<CPDF_Dictionary> trailer = LoadTrailer();
     if (!trailer)
       return SUCCESS;
 
-    m_CrossRefTable->SetTrailer(std::move(trailer), kNoV4TrailerObjectNumber);
+    m_CrossRefTable->SetTrailer(std::move(trailer), kNoTrailerObjectNumber);
     const int32_t xrefsize = GetTrailer()->GetDirectIntegerFor("Size");
     if (xrefsize > 0) {
       // Check if `xrefsize` is correct. If it is incorrect, give up and rebuild
@@ -1209,16 +1219,17 @@
   return SUCCESS;
 }
 
-bool CPDF_Parser::LoadLinearizedAllCrossRefV5(FX_FILESIZE main_xref_offset) {
+bool CPDF_Parser::LoadLinearizedAllCrossRefStream(
+    FX_FILESIZE main_xref_offset) {
   FX_FILESIZE xref_offset = main_xref_offset;
-  if (!LoadCrossRefV5(&xref_offset, /*is_main_xref=*/false)) {
+  if (!LoadCrossRefStream(&xref_offset, /*is_main_xref=*/false)) {
     return false;
   }
 
   std::set<FX_FILESIZE> seen_xref_offset;
   while (xref_offset) {
     seen_xref_offset.insert(xref_offset);
-    if (!LoadCrossRefV5(&xref_offset, /*is_main_xref=*/false)) {
+    if (!LoadCrossRefStream(&xref_offset, /*is_main_xref=*/false)) {
       return false;
     }
 
@@ -1244,8 +1255,8 @@
   m_MetadataObjnum = 0;
   m_ObjectStreamMap.clear();
 
-  if (!LoadLinearizedAllCrossRefV4(main_xref_offset) &&
-      !LoadLinearizedAllCrossRefV5(main_xref_offset)) {
+  if (!LoadLinearizedAllCrossRefTable(main_xref_offset) &&
+      !LoadLinearizedAllCrossRefStream(main_xref_offset)) {
     m_LastXRefOffset = 0;
     return FORMAT_ERROR;
   }
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index 7949854..4bf92fd 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -127,7 +127,7 @@
       std::unique_ptr<CPDF_LinearizedHeader> pLinearized);
 
  protected:
-  bool LoadCrossRefV4(FX_FILESIZE pos, bool bSkip);
+  bool LoadCrossRefTable(FX_FILESIZE pos, bool skip);
   bool RebuildCrossRef();
   Error StartParseInternal();
   FX_FILESIZE ParseStartXRef();
@@ -143,22 +143,22 @@
     CPDF_CrossRefTable::ObjectInfo info;
   };
 
-  bool LoadAllCrossRefV4(FX_FILESIZE xref_offset);
-  bool LoadAllCrossRefV5(FX_FILESIZE xref_offset);
-  bool LoadCrossRefV5(FX_FILESIZE* pos, bool is_main_xref);
-  void ProcessCrossRefV5Entry(pdfium::span<const uint8_t> entry_span,
-                              pdfium::span<const uint32_t> field_widths,
-                              uint32_t obj_num);
-  RetainPtr<CPDF_Dictionary> LoadTrailerV4();
+  bool LoadAllCrossRefTable(FX_FILESIZE xref_offset);
+  bool LoadAllCrossRefStream(FX_FILESIZE xref_offset);
+  bool LoadCrossRefStream(FX_FILESIZE* pos, bool is_main_xref);
+  void ProcessCrossRefStreamEntry(pdfium::span<const uint8_t> entry_span,
+                                  pdfium::span<const uint32_t> field_widths,
+                                  uint32_t obj_num);
+  RetainPtr<CPDF_Dictionary> LoadTrailer();
   Error SetEncryptHandler();
   void ReleaseEncryptHandler();
-  bool LoadLinearizedAllCrossRefV4(FX_FILESIZE main_xref_offset);
-  bool LoadLinearizedAllCrossRefV5(FX_FILESIZE main_xref_offset);
+  bool LoadLinearizedAllCrossRefTable(FX_FILESIZE main_xref_offset);
+  bool LoadLinearizedAllCrossRefStream(FX_FILESIZE main_xref_offset);
   Error LoadLinearizedMainXRefTable();
   const CPDF_ObjectStream* GetObjectStream(uint32_t object_number);
   // A simple check whether the cross reference table matches with
   // the objects.
-  bool VerifyCrossRefV4();
+  bool VerifyCrossRefTable();
 
   // If out_objects is null, the parser position will be moved to end subsection
   // without additional validation.
@@ -166,7 +166,7 @@
       uint32_t start_objnum,
       uint32_t count,
       std::vector<CrossRefObjData>* out_objects);
-  bool ParseCrossRefV4(std::vector<CrossRefObjData>* out_objects);
+  bool ParseCrossRefTable(std::vector<CrossRefObjData>* out_objects);
   void MergeCrossRefObjectsData(const std::vector<CrossRefObjData>& objects);
 
   bool InitSyntaxParser(RetainPtr<CPDF_ReadValidator> validator);
diff --git a/core/fpdfapi/parser/cpdf_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
index 114fb29..b42d7f1 100644
--- a/core/fpdfapi/parser/cpdf_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_parser_unittest.cpp
@@ -128,7 +128,7 @@
   }
 
   // Expose protected CPDF_Parser methods for testing.
-  using CPDF_Parser::LoadCrossRefV4;
+  using CPDF_Parser::LoadCrossRefTable;
   using CPDF_Parser::ParseLinearizedHeader;
   using CPDF_Parser::ParseStartXRef;
   using CPDF_Parser::RebuildCrossRef;
@@ -170,7 +170,7 @@
   ASSERT_FALSE(parser.RebuildCrossRef());
 }
 
-TEST(ParserTest, LoadCrossRefV4) {
+TEST(ParserTest, LoadCrossRefTable) {
   {
     static const unsigned char kXrefTable[] =
         "xref \n"
@@ -185,7 +185,7 @@
     CPDF_TestParser parser;
     ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
 
-    ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
+    ASSERT_TRUE(parser.LoadCrossRefTable(/*pos=*/0, /*skip=*/false));
     static const FX_FILESIZE kOffsets[] = {0, 17, 81, 0, 331, 409};
     static const CPDF_CrossRefTable::ObjectType kTypes[] = {
         CPDF_CrossRefTable::ObjectType::kFree,
@@ -217,7 +217,7 @@
     CPDF_TestParser parser;
     ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
 
-    ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
+    ASSERT_TRUE(parser.LoadCrossRefTable(/*pos=*/0, /*skip=*/false));
     static const FX_FILESIZE kOffsets[] = {0, 0,     0,     25325, 0, 0,    0,
                                            0, 25518, 25635, 0,     0, 25777};
     static const CPDF_CrossRefTable::ObjectType kTypes[] = {
@@ -257,7 +257,7 @@
     CPDF_TestParser parser;
     ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
 
-    ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
+    ASSERT_TRUE(parser.LoadCrossRefTable(/*pos=*/0, /*skip=*/false));
     static const FX_FILESIZE kOffsets[] = {0, 0, 0,     25325, 0, 0,    0,
                                            0, 0, 25635, 0,     0, 25777};
     static const CPDF_CrossRefTable::ObjectType kTypes[] = {
@@ -296,7 +296,7 @@
     CPDF_TestParser parser;
     ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
 
-    ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
+    ASSERT_TRUE(parser.LoadCrossRefTable(/*pos=*/0, /*skip=*/false));
     static const FX_FILESIZE kOffsets[] = {0, 23, 0, 0, 0, 45, 179};
     static const CPDF_CrossRefTable::ObjectType kTypes[] = {
         CPDF_CrossRefTable::ObjectType::kFree,
@@ -330,7 +330,7 @@
         pdfium::make_span(reinterpret_cast<const uint8_t*>(xref_table.c_str()),
                           xref_table.size())));
 
-    ASSERT_TRUE(parser.LoadCrossRefV4(0, false));
+    ASSERT_TRUE(parser.LoadCrossRefTable(/*pos=*/0, /*skip=*/false));
     for (size_t i = 0; i < 2048; ++i) {
       EXPECT_EQ(static_cast<int>(i) + 1, GetObjInfo(parser, i).pos);
       EXPECT_EQ(CPDF_CrossRefTable::ObjectType::kNormal,
@@ -347,10 +347,10 @@
   ASSERT_TRUE(parser.InitTestFromFile(test_file.c_str())) << test_file;
 
   EXPECT_EQ(100940, parser.ParseStartXRef());
-  RetainPtr<CPDF_Object> cross_ref_v5_obj =
+  RetainPtr<CPDF_Object> cross_ref_stream_obj =
       parser.ParseIndirectObjectAt(100940, 0);
-  ASSERT_TRUE(cross_ref_v5_obj);
-  EXPECT_EQ(75u, cross_ref_v5_obj->GetObjNum());
+  ASSERT_TRUE(cross_ref_stream_obj);
+  EXPECT_EQ(75u, cross_ref_stream_obj->GetObjNum());
 }
 
 TEST(ParserTest, ParseStartXRefWithHeaderOffset) {
@@ -369,10 +369,10 @@
   parser.InitTestFromBufferWithOffset(data, kTestHeaderOffset);
 
   EXPECT_EQ(100940, parser.ParseStartXRef());
-  RetainPtr<CPDF_Object> cross_ref_v5_obj =
+  RetainPtr<CPDF_Object> cross_ref_stream_obj =
       parser.ParseIndirectObjectAt(100940, 0);
-  ASSERT_TRUE(cross_ref_v5_obj);
-  EXPECT_EQ(75u, cross_ref_v5_obj->GetObjNum());
+  ASSERT_TRUE(cross_ref_stream_obj);
+  EXPECT_EQ(75u, cross_ref_stream_obj->GetObjNum());
 }
 
 TEST(ParserTest, ParseLinearizedWithHeaderOffset) {