Do not cache m_hMixXFAWidget in CPDFSDK_Widget.
It might go stale as part of a CXFA_LayoutPageMgr::PrepareLayout().
Bug: chromium:884122
Change-Id: I61bd42b5f18a3a6e1f17ec399889c7e74e0825d8
Reviewed-on: https://pdfium-review.googlesource.com/c/47790
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 377e068..bf56613 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -52,25 +52,26 @@
#ifdef PDF_ENABLE_XFA
CXFA_FFWidget* CPDFSDK_Widget::GetMixXFAWidget() const {
CPDFXFA_Context* pContext = m_pPageView->GetFormFillEnv()->GetXFAContext();
- if (pContext->GetFormType() == FormType::kXFAForeground) {
- if (!m_hMixXFAWidget) {
- if (CXFA_FFDocView* pDocView = pContext->GetXFADocView()) {
- WideString sName;
- if (GetFieldType() == FormFieldType::kRadioButton) {
- sName = GetAnnotName();
- if (sName.IsEmpty())
- sName = GetName();
- } else {
- sName = GetName();
- }
+ if (pContext->GetFormType() != FormType::kXFAForeground)
+ return nullptr;
- if (!sName.IsEmpty())
- m_hMixXFAWidget = pDocView->GetWidgetByName(sName, nullptr);
- }
- }
- return m_hMixXFAWidget.Get();
+ CXFA_FFDocView* pDocView = pContext->GetXFADocView();
+ if (!pDocView)
+ return nullptr;
+
+ WideString sName;
+ if (GetFieldType() == FormFieldType::kRadioButton) {
+ sName = GetAnnotName();
+ if (sName.IsEmpty())
+ sName = GetName();
+ } else {
+ sName = GetName();
}
- return nullptr;
+
+ if (sName.IsEmpty())
+ return nullptr;
+
+ return pDocView->GetWidgetByName(sName, nullptr);
}
CXFA_FFWidget* CPDFSDK_Widget::GetGroupMixXFAWidget() const {
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index 9954614..81d0a4c 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -138,7 +138,6 @@
uint32_t m_nValueAge = 0;
#ifdef PDF_ENABLE_XFA
- mutable UnownedPtr<CXFA_FFWidget> m_hMixXFAWidget;
mutable UnownedPtr<CXFA_FFWidgetHandler> m_pWidgetHandler;
#endif // PDF_ENABLE_XFA
};