summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpdfsdk/cpdfsdk_formfillenvironment.cpp10
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)