From 1beb4a9c5ff7ac58450310493783ef7869f4de71 Mon Sep 17 00:00:00 2001 From: Artem Strygin Date: Thu, 2 Nov 2017 14:40:38 +0000 Subject: Unify parsing of linearized header. Change-Id: I3b55b1331ee97af254c248d4ac91b627c9603b59 Reviewed-on: https://pdfium-review.googlesource.com/13831 Commit-Queue: Art Snake Reviewed-by: dsinclair --- core/fpdfapi/parser/cpdf_parser.cpp | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'core/fpdfapi/parser/cpdf_parser.cpp') diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp index 6957c84071..7a8f4f9ce7 100644 --- a/core/fpdfapi/parser/cpdf_parser.cpp +++ b/core/fpdfapi/parser/cpdf_parser.cpp @@ -1280,34 +1280,8 @@ uint32_t CPDF_Parser::GetPermissions() const { return dwPermission; } -bool CPDF_Parser::ParseLinearizedHeader() { - m_pSyntax->SetPos(m_pSyntax->m_HeaderOffset + 9); - - FX_FILESIZE SavedPos = m_pSyntax->GetPos(); - bool bIsNumber; - ByteString word = m_pSyntax->GetNextWord(&bIsNumber); - if (!bIsNumber) - return false; - - word = m_pSyntax->GetNextWord(&bIsNumber); - if (!bIsNumber) - return false; - - if (m_pSyntax->GetKeyword() != "obj") { - m_pSyntax->SetPos(SavedPos); - return false; - } - - m_pLinearized = - CPDF_LinearizedHeader::CreateForObject(m_pSyntax->GetObjectBody(nullptr)); - if (!m_pLinearized) - return false; - - // Move parser onto first page xref table start. - m_pSyntax->GetNextWord(nullptr); - - m_LastXRefOffset = m_pSyntax->GetPos(); - return true; +std::unique_ptr CPDF_Parser::ParseLinearizedHeader() { + return CPDF_LinearizedHeader::Parse(m_pSyntax.get()); } CPDF_Parser::Error CPDF_Parser::StartLinearizedParse( @@ -1320,12 +1294,14 @@ CPDF_Parser::Error CPDF_Parser::StartLinearizedParse( if (!InitSyntaxParser(pFileAccess)) return FORMAT_ERROR; - if (!ParseLinearizedHeader()) + m_pLinearized = ParseLinearizedHeader(); + if (!m_pLinearized) return StartParseInternal(std::move(pDocument)); m_bHasParsed = true; m_pDocument = pDocument; + m_LastXRefOffset = m_pLinearized->GetLastXRefOffset(); FX_FILESIZE dwFirstXRefOffset = m_LastXRefOffset; bool bXRefRebuilt = false; bool bLoadV4 = LoadCrossRefV4(dwFirstXRefOffset, false); -- cgit v1.2.3