Clean up ShrinkObjectMap() methods - Remove CPDF_Parser::ShrinkObjectMap(), since it is a private method that just wraps CPDF_CrossRefTable::ShrinkObjectMap(). Change its sole caller to call CPDF_CrossRefTable::ShrinkObjectMap() directly instead. - Change the parameter for CPDF_CrossRefTable::ShrinkObjectMap() from "objnum" to "size", since all the callers pass in a size. Change-Id: I98b7ff045fd4eb6ec7007737ec999d738df3d025 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108771 Reviewed-by: Nigi <nigi@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_table.cpp b/core/fpdfapi/parser/cpdf_cross_ref_table.cpp index 0bb5bb6..60547b7 100644 --- a/core/fpdfapi/parser/cpdf_cross_ref_table.cpp +++ b/core/fpdfapi/parser/cpdf_cross_ref_table.cpp
@@ -110,16 +110,17 @@ UpdateTrailer(std::move(new_cross_ref->trailer_)); } -void CPDF_CrossRefTable::ShrinkObjectMap(uint32_t objnum) { - if (objnum == 0) { +void CPDF_CrossRefTable::ShrinkObjectMap(uint32_t size) { + if (size == 0) { objects_info_.clear(); return; } - objects_info_.erase(objects_info_.lower_bound(objnum), objects_info_.end()); + objects_info_.erase(objects_info_.lower_bound(size), objects_info_.end()); - if (!pdfium::Contains(objects_info_, objnum - 1)) - objects_info_[objnum - 1].pos = 0; + if (!pdfium::Contains(objects_info_, size - 1)) { + objects_info_[size - 1].pos = 0; + } } void CPDF_CrossRefTable::UpdateInfo(
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_table.h b/core/fpdfapi/parser/cpdf_cross_ref_table.h index 246e129..bfb3777 100644 --- a/core/fpdfapi/parser/cpdf_cross_ref_table.h +++ b/core/fpdfapi/parser/cpdf_cross_ref_table.h
@@ -73,7 +73,7 @@ void Update(std::unique_ptr<CPDF_CrossRefTable> new_cross_ref); - void ShrinkObjectMap(uint32_t objnum); + void ShrinkObjectMap(uint32_t size); private: void UpdateInfo(std::map<uint32_t, ObjectInfo>&& new_objects_info);
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp index b1f591d..249fc33 100644 --- a/core/fpdfapi/parser/cpdf_parser.cpp +++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -200,10 +200,6 @@ return GetObjectType(objnum) == ObjectType::kFree; } -void CPDF_Parser::ShrinkObjectMap(uint32_t size) { - m_CrossRefTable->ShrinkObjectMap(size); -} - bool CPDF_Parser::InitSyntaxParser(RetainPtr<CPDF_ReadValidator> validator) { const absl::optional<FX_FILESIZE> header_offset = GetHeaderOffset(validator); if (!header_offset.has_value()) @@ -384,7 +380,7 @@ m_CrossRefTable->SetTrailer(std::move(trailer), kNoV4TrailerObjectNumber); const int32_t xrefsize = GetTrailer()->GetDirectIntegerFor("Size"); if (xrefsize > 0 && xrefsize <= kMaxXRefSize) - ShrinkObjectMap(xrefsize); + m_CrossRefTable->ShrinkObjectMap(xrefsize); FX_FILESIZE xref_stm = GetTrailer()->GetDirectIntegerFor("XRefStm"); std::vector<FX_FILESIZE> xref_stream_list{xref_stm};
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h index 21dd8aa..09dc724 100644 --- a/core/fpdfapi/parser/cpdf_parser.h +++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -159,7 +159,6 @@ bool LoadLinearizedAllCrossRefV5(FX_FILESIZE main_xref_offset); Error LoadLinearizedMainXRefTable(); const CPDF_ObjectStream* GetObjectStream(uint32_t object_number); - void ShrinkObjectMap(uint32_t size); // A simple check whether the cross reference table matches with // the objects. bool VerifyCrossRefV4();