From 827a1722f70e7092270b5e0fdfba1e9c0b1ac50f Mon Sep 17 00:00:00 2001 From: JUN FANG Date: Thu, 5 Mar 2015 13:39:21 -0800 Subject: Check whether a pdf has XFA fields before loading XFA fields BUG=452793 R=tsepez@chromium.org Review URL: https://codereview.chromium.org/973673002 --- fpdfsdk/src/fpdfview.cpp | 63 +++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) (limited to 'fpdfsdk') diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp index 6a8f890115..db191245f3 100644 --- a/fpdfsdk/src/fpdfview.cpp +++ b/fpdfsdk/src/fpdfview.cpp @@ -303,43 +303,40 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path, FPDF_BY return pDocument; } -DLLEXPORT FX_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int& docType) -{ - if (!document) - return FALSE; - - CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot(); - if (!pRoot) - return FALSE; - - CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); - if (!pAcroForm) - return FALSE; - - CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); - if (!pXFA) - return FALSE; - - FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE); - - if (bDynamicXFA) - docType = DOCTYPE_DYNIMIC_XFA; - else - docType = DOCTYPE_STATIC_XFA; - - return TRUE; -} - -DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) +DLLEXPORT FX_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int& docType) { - if (!document) + if (!document) + return FALSE; + + CPDF_Document *pdfDoc = (static_cast(document))->GetPDFDoc(); + if (!pdfDoc) + return FALSE; + + CPDF_Dictionary* pRoot = pdfDoc->GetRoot(); + if (!pRoot) + return FALSE; + + CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm"); + if (!pAcroForm) return FALSE; - int iDocType = DOCTYPE_PDF; - FX_BOOL hasXFAField = FPDF_HasXFAField(document, iDocType); - if (!hasXFAField) + CPDF_Object* pXFA = pAcroForm->GetElement("XFA"); + if (!pXFA) return FALSE; - return ((CPDFXFA_Document*)document)->LoadXFADoc(); + + FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE); + + if (bDynamicXFA) + docType = DOCTYPE_DYNIMIC_XFA; + else + docType = DOCTYPE_STATIC_XFA; + + return TRUE; +} + +DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) +{ + return document && (static_cast(document))->LoadXFADoc(); } -- cgit v1.2.3