summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fpdfapi/parser/cpdf_data_avail.cpp28
1 files changed, 6 insertions, 22 deletions
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index aaec4c7708..38e857f22f 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -634,30 +634,14 @@ std::unique_ptr<CPDF_Object> CPDF_DataAvail::ParseIndirectObjectAt(
FX_FILESIZE pos,
uint32_t objnum,
CPDF_IndirectObjectHolder* pObjList) {
- FX_FILESIZE SavedPos = m_syntaxParser.GetPos();
+ const FX_FILESIZE SavedPos = m_syntaxParser.GetPos();
m_syntaxParser.SetPos(pos);
-
- bool bIsNumber;
- ByteString word = m_syntaxParser.GetNextWord(&bIsNumber);
- if (!bIsNumber)
- return nullptr;
-
- uint32_t parser_objnum = FXSYS_atoui(word.c_str());
- if (objnum && parser_objnum != objnum)
- return nullptr;
-
- word = m_syntaxParser.GetNextWord(&bIsNumber);
- if (!bIsNumber)
- return nullptr;
-
- if (m_syntaxParser.GetKeyword() != "obj") {
- m_syntaxParser.SetPos(SavedPos);
- return nullptr;
- }
-
- std::unique_ptr<CPDF_Object> pObj = m_syntaxParser.GetObjectBody(pObjList);
+ std::unique_ptr<CPDF_Object> result = m_syntaxParser.GetIndirectObject(
+ pObjList, CPDF_SyntaxParser::ParseType::kLoose);
m_syntaxParser.SetPos(SavedPos);
- return pObj;
+ return (result && (!objnum || result->GetObjNum() == objnum))
+ ? std::move(result)
+ : nullptr;
}
CPDF_DataAvail::DocLinearizationStatus CPDF_DataAvail::IsLinearizedPDF() {