From 709f5a9301e91365ab87610993c497e386504ead Mon Sep 17 00:00:00 2001 From: dsinclair Date: Tue, 11 Oct 2016 14:21:16 -0700 Subject: Fixup formfiller cleanup The CFFL_InteractiveFormFiller must be cleaned up before the environment because the destruction of the formfiller will trigger the destruction of the formfiller widgets. Some of those widgets may require stopping timers, which requires accessing the environment. BUG=chromium:654272, chromium:653459 Review-Url: https://codereview.chromium.org/2408163003 --- fpdfsdk/cpdfsdk_formfillenvironment.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'fpdfsdk/cpdfsdk_formfillenvironment.cpp') diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp index 5b05d08128..7b41ea148c 100644 --- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp +++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp @@ -39,6 +39,16 @@ CPDFSDK_FormFillEnvironment::CPDFSDK_FormFillEnvironment( m_pSysHandler(new CFX_SystemHandler(this)) {} CPDFSDK_FormFillEnvironment::~CPDFSDK_FormFillEnvironment() { + // |m_pAnnotHandlerMgr| will try to access |m_pFormFiller| + // when it cleans up. So, we must make sure it is cleaned up before + // |m_pFormFiller|. + m_pAnnotHandlerMgr.reset(); + + // Must destroy the |m_pFormFiller| before the environment (|this|) + // because any created form widgets hold a pointer to the environment. + // Those widgets may call things like KillTimer() as they are shutdown. + m_pFormFiller.reset(); + #ifdef PDF_ENABLE_XFA CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); if (pProvider->m_pEnvList.GetSize() == 0) -- cgit v1.2.3