summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser
diff options
context:
space:
mode:
authorArtem Strygin <art-snake@yandex-team.ru>2018-06-22 12:45:14 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-06-22 12:45:14 +0000
commita327030ca50bd9e06d4bab3ffc5610bf348be0ee (patch)
treefe392e1b235dd2e218f121325fc6bbfc18bdbe68 /core/fpdfapi/parser
parentc3cc2ab66d3d8f52dea8083abb6775115e17af7d (diff)
downloadpdfium-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.cpp23
-rw-r--r--core/fpdfapi/parser/cpdf_document.h4
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);