Re-arrange destruction order in ~CXFA_FFPageWidgetIterator()
Avoid dangling UnownedPtr<> when iterator holds the last pageview reference.
Bug: chromium:1065772
Change-Id: I427a36d532c29ed57304bd08070a73ebe25c0d44
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/68030
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 0e87256..e185e0d 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -154,12 +154,12 @@
CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView,
uint32_t dwFilter)
- : m_pPageView(pPageView),
+ : m_sIterator(pPageView->GetLayoutItem()),
+ m_pPageView(pPageView),
m_dwFilter(dwFilter),
- m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))),
- m_sIterator(pPageView->GetLayoutItem()) {}
+ m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))) {}
-CXFA_FFPageWidgetIterator::~CXFA_FFPageWidgetIterator() {}
+CXFA_FFPageWidgetIterator::~CXFA_FFPageWidgetIterator() = default;
void CXFA_FFPageWidgetIterator::Reset() {
m_sIterator.Reset();
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index 4030e78..59d32da 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -59,11 +59,11 @@
private:
CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem);
+ CXFA_LayoutItemIterator m_sIterator; // Must outlive |m_pPageView|.
UnownedPtr<CXFA_FFPageView> const m_pPageView;
UnownedPtr<CXFA_FFWidget> m_hCurWidget;
const uint32_t m_dwFilter;
const bool m_bIgnoreRelevant;
- CXFA_LayoutItemIterator m_sIterator;
};
class CXFA_TabParam {