Observe destruction of CXFA_FFComboBox across FWL events
Bug: chromium:1039629
Change-Id: Id633c78a660eb663b7824950447682046d75f347
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/64712
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index fd485db..97de8ca 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -310,9 +310,13 @@
}
void CXFA_FFComboBox::OnSelectChanged(CFWL_Widget* pWidget, bool bLButtonUp) {
+ ObservedPtr<CXFA_FFComboBox> watched(this);
CXFA_EventParam eParam;
eParam.m_wsPrevText = m_pNode->GetValue(XFA_VALUEPICTURE_Raw);
FWLEventSelChange(&eParam);
+ if (!watched)
+ return;
+
if (m_pNode->IsChoiceListCommitOnSelect() && bLButtonUp)
m_pDocView->SetFocusNode(nullptr);
}
@@ -336,6 +340,7 @@
}
void CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) {
+ ObservedPtr<CXFA_FFComboBox> watched(this);
CXFA_FFField::OnProcessEvent(pEvent);
switch (pEvent->GetType()) {
case CFWL_Event::Type::SelectChanged: {
@@ -359,7 +364,8 @@
default:
break;
}
- m_pOldDelegate->OnProcessEvent(pEvent);
+ if (watched)
+ m_pOldDelegate->OnProcessEvent(pEvent);
}
void CXFA_FFComboBox::OnDrawWidget(CXFA_Graphics* pGraphics,