Slightly simplify ~CPDFXFA_Context().
Need to remove work in this destructor so that we can easily
change the destruction order of dependent objects by moving
declaration order around in the header.
Change-Id: I234b02b51da55d35db9df5cc1de04d93d4feb2a2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/71873
Commit-Queue: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 612dbe8..62106a7 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -110,7 +110,13 @@
m_pDocPage->SetDocument(this);
}
-CPDF_Document::~CPDF_Document() = default;
+CPDF_Document::~CPDF_Document() {
+ // Be absolutely certain that |m_pExtension| is null before destroying
+ // the extension, to avoid re-entering it while being destroyed. clang
+ // seems to already do this for us, but the C++ standards seem to
+ // indicate the opposite.
+ m_pExtension.reset();
+}
// static
bool CPDF_Document::IsValidPageObject(const CPDF_Object* obj) {
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 1bf7be0..08ba40e 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -95,9 +95,6 @@
if (m_pFormFillEnv) {
m_pFormFillEnv->ClearAllFocusedAnnots();
- // Once we're deleted the FormFillEnvironment will point at a bad underlying
- // doc so we need to reset it ...
- m_pFormFillEnv->GetPDFDocument()->SetExtension(nullptr);
m_pFormFillEnv.Reset();
}