Do the ScopedSetInsertion later in CPDF_Parser::GetObjectStream().
As is, the ScopedSetInsertion happens fairly early, but is not necessary
until later in GetObjectStream(). So move it down to potentially do
fewer inserts.
Change-Id: Ia5774f48015a11529ab6f18e1e6da42342b6ec2c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80370
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index f131121..f5491dd 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -889,8 +889,6 @@
if (pdfium::Contains(m_ParsingObjNums, object_number))
return nullptr;
- ScopedSetInsertion<uint32_t> local_insert(&m_ParsingObjNums, object_number);
-
auto it = m_ObjectStreamMap.find(object_number);
if (it != m_ObjectStreamMap.end())
return it->second.get();
@@ -903,6 +901,9 @@
if (object_pos <= 0)
return nullptr;
+ // Keep track of `object_number` before doing more parsing.
+ ScopedSetInsertion<uint32_t> local_insert(&m_ParsingObjNums, object_number);
+
RetainPtr<CPDF_Object> object =
ParseIndirectObjectAt(object_pos, object_number);
if (!object)