summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-04-27 19:32:59 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-27 19:32:59 +0000
commit862cbe46b7d7040e35733f5ed63839ee34223387 (patch)
tree45895d00a62941d48311734c5244d0d1ecf34d56 /core/fpdfapi/parser
parent2b053ce82e921984ee191b26fe9a760ba1508a66 (diff)
downloadpdfium-862cbe46b7d7040e35733f5ed63839ee34223387.tar.xz
Avoid potential duplicate unique_ptr to CPDF_Document from CPDFXA_Context.
Should FPDFDocumentFromCPDFDocument() be called several times under XFA, we may WrapUnique() the document several times. So cache a pointer back from CPDF_Document to CPDFXFA_Context to avoid this. Because of layering, introduce a placeholder type CPDF_Document::Extension. This is actually the first step in some larger XFA ownership cleanup, but makes a nice standalone CL around the one particular issue. Change-Id: I4be326ddb1a5fae7339e6ed6745dd551b1374b53 Reviewed-on: https://pdfium-review.googlesource.com/31570 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser')
-rw-r--r--core/fpdfapi/parser/cpdf_document.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index d73dbc1df9..adf4eca75d 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -41,9 +41,15 @@ class JBig2_DocumentContext;
class CPDF_Document : public CPDF_IndirectObjectHolder {
public:
+ // Type from which the XFA extension can subclass itself.
+ class Extension {};
+
explicit CPDF_Document(std::unique_ptr<CPDF_Parser> pParser);
~CPDF_Document() override;
+ Extension* GetExtension() const { return m_pExtension.Get(); }
+ void SetExtension(Extension* pExt) { m_pExtension = pExt; }
+
CPDF_Parser* GetParser() const { return m_pParser.get(); }
const CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
CPDF_Dictionary* GetRoot() { return m_pRootDict; }
@@ -153,6 +159,7 @@ class CPDF_Document : public CPDF_IndirectObjectHolder {
std::unique_ptr<JBig2_DocumentContext> m_pCodecContext;
std::unique_ptr<CPDF_LinkList> m_pLinksContext;
std::vector<uint32_t> m_PageList;
+ UnownedPtr<Extension> m_pExtension;
};
#endif // CORE_FPDFAPI_PARSER_CPDF_DOCUMENT_H_