Stop holding CXFA_FFDocView::m_pFocusWidget in local variables.
It may get updated across any number of reentrant calls.
Bug: chromium:1037981
Change-Id: If35eeea75cc39f9d0ae03fe02ee7d3603a49ec65
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/64530
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index 7c21efb..ccf17bf 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -282,23 +282,21 @@
}
bool CXFA_FFDocView::SetFocus(CXFA_FFWidget* pNewFocus) {
- CXFA_FFWidget* pOldFocus = m_pFocusWidget.Get();
-
- if (pOldFocus == pNewFocus)
+ if (pNewFocus == m_pFocusWidget)
return false;
- if (pOldFocus) {
- CXFA_ContentLayoutItem* pItem = pOldFocus->GetLayoutItem();
+ if (m_pFocusWidget) {
+ CXFA_ContentLayoutItem* pItem = m_pFocusWidget->GetLayoutItem();
if (pItem->TestStatusBits(XFA_WidgetStatus_Visible) &&
!pItem->TestStatusBits(XFA_WidgetStatus_Focused)) {
- if (!pOldFocus->IsLoaded())
- pOldFocus->LoadWidget();
- if (!pOldFocus->OnSetFocus(pOldFocus))
- pOldFocus = nullptr;
+ if (!m_pFocusWidget->IsLoaded())
+ m_pFocusWidget->LoadWidget();
+ if (!m_pFocusWidget->OnSetFocus(m_pFocusWidget.Get()))
+ m_pFocusWidget.Reset();
}
}
- if (pOldFocus) {
- if (!pOldFocus->OnKillFocus(pNewFocus))
+ if (m_pFocusWidget) {
+ if (!m_pFocusWidget->OnKillFocus(pNewFocus))
return false;
}
@@ -306,7 +304,7 @@
if (pNewFocus->GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible)) {
if (!pNewFocus->IsLoaded())
pNewFocus->LoadWidget();
- if (!pNewFocus->OnSetFocus(pOldFocus))
+ if (!pNewFocus->OnSetFocus(m_pFocusWidget.Get()))
pNewFocus = nullptr;
}
}