Move |CXFA_FFDocView::m_ValidateNodes| before iterating over it.
Similar issue to the one fixed in commit 12eacc8a.
BUG=chromium:933163
Change-Id: I7e79dd27a5ebbaceaa0db0604c28520b24a8d7f6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52832
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index a346abe..49edda3 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -576,11 +576,15 @@
if (!m_pDoc->GetDocEnvironment()->IsValidationsEnabled(m_pDoc.Get()))
return false;
- for (CXFA_Node* node : m_ValidateNodes) {
- if (!node->HasRemovedChildren())
- node->ProcessValidate(this, 0);
+ while (!m_ValidateNodes.empty()) {
+ std::vector<CXFA_Node*> nodes = std::move(m_ValidateNodes);
+ m_ValidateNodes.clear();
+ for (CXFA_Node* node : nodes) {
+ if (!node->HasRemovedChildren())
+ node->ProcessValidate(this, 0);
+ }
+ // May have created more nodes to validate, try again.
}
- m_ValidateNodes.clear();
return true;
}