From 2d868435f4c0d47ded1ea405ad2af6b9d83b6651 Mon Sep 17 00:00:00 2001 From: Artem Strygin Date: Tue, 26 Jun 2018 16:38:49 +0000 Subject: Unify CPDF_Document loading methods. Change-Id: Ibf7aee942027adace7ec0831aefe0fe8c28e41cc Reviewed-on: https://pdfium-review.googlesource.com/35610 Commit-Queue: Art Snake Reviewed-by: dsinclair --- core/fpdfapi/parser/cpdf_document.cpp | 37 +++++++++++++++-------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'core/fpdfapi/parser/cpdf_document.cpp') diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp index 393a6f6785..8f727ed14a 100644 --- a/core/fpdfapi/parser/cpdf_document.cpp +++ b/core/fpdfapi/parser/cpdf_document.cpp @@ -191,9 +191,6 @@ CPDF_Document::CPDF_Document(std::unique_ptr pParser) m_pRootDict(nullptr), m_iNextPageToTraverse(0), m_bReachedMaxPageLevel(false), - m_bLinearized(false), - m_iFirstPageNo(0), - m_dwFirstPageObjNum(0), m_pDocPage(pdfium::MakeUnique(this)), m_pDocRender(pdfium::MakeUnique(this)) { if (pParser) @@ -226,17 +223,18 @@ void CPDF_Document::LoadDoc() { LoadPages(); } -void CPDF_Document::LoadLinearizedDoc( - const CPDF_LinearizedHeader* pLinearizationParams) { - m_bLinearized = true; - LoadDocInternal(); - m_PageList.resize(pLinearizationParams->GetPageCount()); - m_iFirstPageNo = pLinearizationParams->GetFirstPageNo(); - m_dwFirstPageObjNum = pLinearizationParams->GetFirstPageObjNum(); -} - void CPDF_Document::LoadPages() { - m_PageList.resize(RetrievePageCount()); + const CPDF_LinearizedHeader* linearized_header = + m_pParser->GetLinearizedHeader(); + if (!linearized_header) { + m_PageList.resize(RetrievePageCount()); + return; + } + + m_PageList.resize(linearized_header->GetPageCount()); + DCHECK(linearized_header->GetFirstPageNo() < m_PageList.size()); + m_PageList[linearized_header->GetFirstPageNo()] = + linearized_header->GetFirstPageObjNum(); } CPDF_Dictionary* CPDF_Document::TraversePDFPages(int iPage, @@ -329,15 +327,12 @@ CPDF_Dictionary* CPDF_Document::GetPageDictionary(int iPage) { if (!pdfium::IndexInBounds(m_PageList, iPage)) return nullptr; - if (m_bLinearized && iPage == m_iFirstPageNo) { - if (CPDF_Dictionary* pDict = - ToDictionary(GetOrParseIndirectObject(m_dwFirstPageObjNum))) { - return pDict; - } + const uint32_t objnum = m_PageList[iPage]; + if (objnum) { + CPDF_Dictionary* result = ToDictionary(GetOrParseIndirectObject(objnum)); + if (result) + return result; } - uint32_t objnum = m_PageList[iPage]; - if (objnum) - return ToDictionary(GetOrParseIndirectObject(objnum)); CPDF_Dictionary* pPages = GetPagesDict(); if (!pPages) -- cgit v1.2.3