diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-06-04 17:12:27 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-06-04 17:12:27 +0000 |
commit | 28d30b4870fb5327937fa0541d0059fc439736aa (patch) | |
tree | bb9ad2321d3b0f5ff9e5d2481e4520055ff94832 | |
parent | 037d938a172dda98b25a6e8bdfc4a83d6991fbed (diff) | |
download | pdfium-28d30b4870fb5327937fa0541d0059fc439736aa.tar.xz |
Revert "Remove more ifndef XFA cases"
This reverts commit 38cb7263a0923dd5613da24b18d3d7ef052ff5e3.
Reason for revert: Blocking prior revert.
Original change's description:
> Remove more ifndef XFA cases
>
> Remove FXFT_Clear_Face_External_Stream() calls, period. This would cause
> FT to try to free memory allocated by the caller, with potentially a
> different allocator. If we're leaking, msan will find it, and we can
> deal with it properly rather than trying to force FT to tidy after us.
>
> Always call SetView(), if we have a PDF page. At worst, the link won't
> be used in the XFA case.
>
> Always return 0 for the null document permissions. If we don't have a
> document, then we can't dynamically tell if its an XFA doc, so there's
> no reason to believe it should have all permissions. If there is an
> XFA doc under the covers, then the extension will give us the value.
>
>
> Change-Id: I6e3fb589eda722786567d96288cb35f43643437b
> Reviewed-on: https://pdfium-review.googlesource.com/33370
> Commit-Queue: Tom Sepez <tsepez@chromium.org>
> Reviewed-by: Lei Zhang <thestig@chromium.org>
TBR=thestig@chromium.org,tsepez@chromium.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: I68b6a50ef28fb3d6ab9d8494c4486ca9fb66589e
Reviewed-on: https://pdfium-review.googlesource.com/33734
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
-rw-r--r-- | core/fxge/cfx_font.cpp | 9 | ||||
-rw-r--r-- | fpdfsdk/cpdfsdk_pageview.cpp | 15 | ||||
-rw-r--r-- | fpdfsdk/fpdf_view.cpp | 11 |
3 files changed, 25 insertions, 10 deletions
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp index 08e33d6397..bee1d789ef 100644 --- a/core/fxge/cfx_font.cpp +++ b/core/fxge/cfx_font.cpp @@ -317,9 +317,14 @@ void CFX_Font::SetSubstFont(std::unique_ptr<CFX_SubstFont> subst) { #endif // PDF_ENABLE_XFA CFX_Font::~CFX_Font() { - if (m_Face) + if (m_Face) { +#ifndef PDF_ENABLE_XFA + if (FXFT_Get_Face_External_Stream(m_Face)) { + FXFT_Clear_Face_External_Stream(m_Face); + } +#endif // PDF_ENABLE_XFA DeleteFace(); - + } #if _FX_PLATFORM_ == _FX_PLATFORM_APPLE_ ReleasePlatformResource(); #endif diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp index 06d197dfba..5cb5f2ced2 100644 --- a/fpdfsdk/cpdfsdk_pageview.cpp +++ b/fpdfsdk/cpdfsdk_pageview.cpp @@ -38,18 +38,19 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_FormFillEnvironment* pFormFillEnv, CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm(); CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm(); pPDFInterForm->FixPageFields(pPDFPage); +#ifndef PDF_ENABLE_XFA pPDFPage->SetView(this); +#endif // PDF_ENABLE_XFA } } CPDFSDK_PageView::~CPDFSDK_PageView() { - CPDF_Page* pPDFPage = ToPDFPage(m_page); - if (pPDFPage) { - // The call to |ReleaseAnnot| can cause the page pointed to by |m_page| to - // be freed, which will cause issues if we try to cleanup the pageview ptr - // in |m_page|. So, reset the pageview pointer before doing anything else. - pPDFPage->SetView(nullptr); - } +#ifndef PDF_ENABLE_XFA + // The call to |ReleaseAnnot| can cause the page pointed to by |m_page| to + // be freed, which will cause issues if we try to cleanup the pageview pointer + // in |m_page|. So, reset the pageview pointer before doing anything else. + m_page->AsPDFPage()->SetView(nullptr); +#endif // PDF_ENABLE_XFA CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = m_pFormFillEnv->GetAnnotHandlerMgr(); diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index f5a164a75f..f0ceb1f378 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -308,7 +308,16 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_GetFileVersion(FPDF_DOCUMENT doc, FPDF_EXPORT unsigned long FPDF_CALLCONV FPDF_GetDocPermissions(FPDF_DOCUMENT document) { CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); - return pDoc ? pDoc->GetUserPermissions() : 0; + // https://bugs.chromium.org/p/pdfium/issues/detail?id=499 + if (!pDoc) { +#ifndef PDF_ENABLE_XFA + return 0; +#else // PDF_ENABLE_XFA + return 0xFFFFFFFF; +#endif // PDF_ENABLE_XFA + } + + return pDoc->GetUserPermissions(); } FPDF_EXPORT int FPDF_CALLCONV |