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();