diff options
author | Artem Strygin <art-snake@yandex-team.ru> | 2018-06-22 12:45:14 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-06-22 12:45:14 +0000 |
commit | a327030ca50bd9e06d4bab3ffc5610bf348be0ee (patch) | |
tree | fe392e1b235dd2e218f121325fc6bbfc18bdbe68 /core/fpdfapi/parser | |
parent | c3cc2ab66d3d8f52dea8083abb6775115e17af7d (diff) | |
download | pdfium-a327030ca50bd9e06d4bab3ffc5610bf348be0ee.tar.xz |
Rework of Fixing metadata not read from linearized file.
Move receiving "Info" dictionary form API implementation to CPDF_Document.
Also added test.
Bug: pdfium:664
Change-Id: I273980750fbdd4d20711f651245780fc9ba02789
Reviewed-on: https://pdfium-review.googlesource.com/35490
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser')
-rw-r--r-- | core/fpdfapi/parser/cpdf_document.cpp | 23 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_document.h | 4 |
2 files changed, 13 insertions, 14 deletions
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp index b163cafbbb..393a6f6785 100644 --- a/core/fpdfapi/parser/cpdf_document.cpp +++ b/core/fpdfapi/parser/cpdf_document.cpp @@ -219,17 +219,6 @@ void CPDF_Document::LoadDocInternal() { m_pRootDict = pRootObj->GetDict(); if (!m_pRootDict) return; - - LoadDocumentInfo(); -} - -void CPDF_Document::LoadDocumentInfo() { - if (!m_pParser) - return; - - CPDF_Object* pInfoObj = GetOrParseIndirectObject(m_pParser->GetInfoObjNum()); - if (pInfoObj) - m_pInfoDict = pInfoObj->GetDict(); } void CPDF_Document::LoadDoc() { @@ -601,6 +590,18 @@ bool CPDF_Document::InsertNewPage(int iPage, CPDF_Dictionary* pPageDict) { return true; } +CPDF_Dictionary* CPDF_Document::GetInfo() { + if (m_pInfoDict) + return m_pInfoDict.Get(); + + if (!m_pParser || !m_pParser->GetInfoObjNum()) + return nullptr; + + CPDF_Reference ref(this, m_pParser->GetInfoObjNum()); + m_pInfoDict = ToDictionary(ref.GetDirect()); + return m_pInfoDict.Get(); +} + void CPDF_Document::DeletePage(int iPage) { CPDF_Dictionary* pPages = GetPagesDict(); if (!pPages) diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h index d196438e80..94d20504c5 100644 --- a/core/fpdfapi/parser/cpdf_document.h +++ b/core/fpdfapi/parser/cpdf_document.h @@ -63,8 +63,7 @@ class CPDF_Document : public CPDF_IndirectObjectHolder { CPDF_Parser* GetParser() const { return m_pParser.get(); } const CPDF_Dictionary* GetRoot() const { return m_pRootDict; } CPDF_Dictionary* GetRoot() { return m_pRootDict; } - const CPDF_Dictionary* GetInfo() const { return m_pInfoDict.Get(); } - CPDF_Dictionary* GetInfo() { return m_pInfoDict.Get(); } + CPDF_Dictionary* GetInfo(); void DeletePage(int iPage); int GetPageCount() const; @@ -101,7 +100,6 @@ class CPDF_Document : public CPDF_IndirectObjectHolder { void LoadDoc(); void LoadLinearizedDoc(const CPDF_LinearizedHeader* pLinearizationParams); void LoadPages(); - void LoadDocumentInfo(); void CreateNewDoc(); CPDF_Dictionary* CreateNewPage(int iPage); |