From 1be28d1b037de32c75632e10e7d2fc758fe7f962 Mon Sep 17 00:00:00 2001 From: Jun Fang Date: Mon, 1 Feb 2016 20:18:32 -0800 Subject: Fix a crashier in CPDFSDK_Document::GetPageView() XFA document should be released before SDK document is released. BUG=pdfium:369 R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1652883002 . --- fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp index d37038d2af..7c2bbf0aea 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp @@ -45,28 +45,26 @@ CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc, } CPDFXFA_Document::~CPDFXFA_Document() { - if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv()) - m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); - - delete m_pSDKDoc; - - if (m_pPDFDoc) { - CPDF_Parser* pParser = m_pPDFDoc->GetParser(); - if (pParser) - delete pParser; - else - delete m_pPDFDoc; - } if (m_pXFADoc) { IXFA_App* pApp = m_pApp->GetXFAApp(); if (pApp) { IXFA_DocHandler* pDocHandler = pApp->GetDocHandler(); - if (pDocHandler) { + if (pDocHandler) CloseXFADoc(pDocHandler); - } } delete m_pXFADoc; + m_pXFADoc = nullptr; } + if (m_pPDFDoc) { + CPDF_Parser* pParser = m_pPDFDoc->GetParser(); + if (pParser) + delete pParser; + else + delete m_pPDFDoc; + } + if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv()) + m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext); + delete m_pSDKDoc; } FX_BOOL CPDFXFA_Document::LoadXFADoc() { @@ -487,7 +485,6 @@ void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView, if (!pPage) return; pPage->SetXFAPageView(nullptr); - m_pSDKDoc->GetPageView(pPage)->ClearFXAnnots(); } void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, -- cgit v1.2.3