diff options
Diffstat (limited to 'xfa/fxfa/parser/cxfa_nodeowner.cpp')
-rw-r--r-- | xfa/fxfa/parser/cxfa_nodeowner.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/xfa/fxfa/parser/cxfa_nodeowner.cpp b/xfa/fxfa/parser/cxfa_nodeowner.cpp index ae6f589616..63f2f717c2 100644 --- a/xfa/fxfa/parser/cxfa_nodeowner.cpp +++ b/xfa/fxfa/parser/cxfa_nodeowner.cpp @@ -15,6 +15,19 @@ CXFA_NodeOwner::CXFA_NodeOwner() = default; CXFA_NodeOwner::~CXFA_NodeOwner() = default; +void CXFA_NodeOwner::ReleaseXMLNodesIfNeeded() { + // Because we don't know what order we'll free the nodes we may end up + // destroying the XML tree before nodes have been cleaned up that point into + // it. This will cause the ProbeForLowSeverityLifetimeIssue to fire. + // + // This doesn't happen in the destructor because of the ownership semantics + // between the CXFA_Document and CXFA_SimpleParser. It has to happen before + // the simple parser is destroyed, but the document has to live longer then + // the simple parser. + for (auto& it : nodes_) + it->ReleaseXMLNodeIfUnowned(); +} + CXFA_Node* CXFA_NodeOwner::AddOwnedNode(std::unique_ptr<CXFA_Node> node) { if (!node) return nullptr; |