diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp index acd9a1af1..2fd3887f9 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp @@ -327,6 +327,9 @@ void CPDFXFA_Page::DrawFocusAnnot(CFX_RenderDevice* pDevice, xfaView, Mask{XFA_WidgetStatus::kVisible, XFA_WidgetStatus::kViewable}); + // MoveToNext() may lazy-load a widget, which can run XFA script and + // synchronously delete |pAnnot|. + ObservedPtr pObservedAnnot(pAnnot); while (true) { CXFA_FFWidget* pWidget = pWidgetIterator.MoveToNext(); if (!pWidget) { @@ -341,7 +344,7 @@ void CPDFXFA_Page::DrawFocusAnnot(CFX_RenderDevice* pDevice, } } - CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pAnnot); + CPDFXFA_Widget* pXFAWidget = ToXFAWidget(pObservedAnnot.Get()); if (!pXFAWidget) { return; }