diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-05-01 17:46:34 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-05-01 17:46:34 +0000 |
commit | 3f3c39d04fd68d8ce11f52baa3acae8e0522a2c4 (patch) | |
tree | 6126bc07b3e212f758dfa4e13462fb7bfaa6d97f /fpdfsdk/fpdf_editpage.cpp | |
parent | fe06d5109cd575c1e53b9b1cc3cc4ec3c5d7364f (diff) | |
download | pdfium-3f3c39d04fd68d8ce11f52baa3acae8e0522a2c4.tar.xz |
Check for NULL XFA context even when XFA
Use strict typing for FPDF_Page to ensure we don't fall into
code that expects the other page type when continuing from null
context case.
Change-Id: I7f028ef3e3d733f5557620030a87e22997da00d5
Reviewed-on: https://pdfium-review.googlesource.com/31770
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'fpdfsdk/fpdf_editpage.cpp')
-rw-r--r-- | fpdfsdk/fpdf_editpage.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp index 3acbe76d10..19a61bcdc6 100644 --- a/fpdfsdk/fpdf_editpage.cpp +++ b/fpdfsdk/fpdf_editpage.cpp @@ -156,14 +156,17 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_Delete(FPDF_DOCUMENT document, auto* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return; + #ifdef PDF_ENABLE_XFA CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(pDoc->GetExtension()); - if (pContext) + if (pContext) { pContext->DeletePage(page_index); -#else + return; + } +#endif // PDF_ENABLE_XFA + pDoc->DeletePage(page_index); -#endif } FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document, @@ -184,14 +187,18 @@ FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document, pPageDict->SetNewFor<CPDF_Dictionary>("Resources"); #ifdef PDF_ENABLE_XFA - auto pXFAPage = pdfium::MakeRetain<CPDFXFA_Page>( - static_cast<CPDFXFA_Context*>(pDoc->GetExtension()), page_index); - pXFAPage->LoadPDFPage(pPageDict); - return pXFAPage.Leak(); // Caller takes ownership. + auto* pContext = static_cast<CPDFXFA_Context*>(pDoc->GetExtension()); + if (pContext) { + auto pXFAPage = pdfium::MakeRetain<CPDFXFA_Page>(pContext, page_index); + pXFAPage->LoadPDFPage(pPageDict); + return FPDFPageFromUnderlying(pXFAPage.Leak()); // Caller takes ownership. + } + // Eventually, fallthru into non-XFA case once page type is consistent. + return nullptr; #else // PDF_ENABLE_XFA auto pPage = pdfium::MakeUnique<CPDF_Page>(pDoc, pPageDict, true); pPage->ParseContent(); - return pPage.release(); // Caller takes ownership. + return FPDFPageFromUnderlying(pPage.release()); // Caller takes ownership. #endif // PDF_ENABLE_XFA } |