diff options
author | dsinclair <dsinclair@chromium.org> | 2016-10-11 14:21:16 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-11 14:21:16 -0700 |
commit | 709f5a9301e91365ab87610993c497e386504ead (patch) | |
tree | b3bb6e52079c5eca2e5ee707b84a5308352f9bc1 | |
parent | cf3816187f6cbee5569a5924dc1ce1074ffcad7a (diff) | |
download | pdfium-709f5a9301e91365ab87610993c497e386504ead.tar.xz |
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
-rw-r--r-- | fpdfsdk/cpdfsdk_formfillenvironment.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
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) |