diff options
author | JUN FANG <jun_fang@foxitsoftware.com> | 2015-03-05 13:39:21 -0800 |
---|---|---|
committer | JUN FANG <jun_fang@foxitsoftware.com> | 2015-03-05 13:39:21 -0800 |
commit | 827a1722f70e7092270b5e0fdfba1e9c0b1ac50f (patch) | |
tree | 4f54a77d5b14d0ee3cce0e210fd8c450f7a92042 /fpdfsdk/src | |
parent | 2785fb46249df5229e057917e54fe161bb0e3517 (diff) | |
download | pdfium-827a1722f70e7092270b5e0fdfba1e9c0b1ac50f.tar.xz |
Check whether a pdf has XFA fields before loading XFA fields
BUG=452793
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/973673002
Diffstat (limited to 'fpdfsdk/src')
-rw-r--r-- | fpdfsdk/src/fpdfview.cpp | 63 |
1 files changed, 30 insertions, 33 deletions
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<CPDFXFA_Document *>(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<CPDFXFA_Document *>(document))->LoadXFADoc(); } |