Index: xfa/fxfa/parser/xfa_object_imp.cpp |
diff --git a/xfa/fxfa/parser/xfa_object_imp.cpp b/xfa/fxfa/parser/xfa_object_imp.cpp |
index f9887825f5a1efbb38257add17d0ff562786e118..0fbde1f160533dec3e74d7bcbe1ce29ef15efe9b 100644 |
--- a/xfa/fxfa/parser/xfa_object_imp.cpp |
+++ b/xfa/fxfa/parser/xfa_object_imp.cpp |
@@ -120,10 +120,10 @@ |
delete pNode; |
pNode = pNext; |
} |
- if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) |
- delete m_pXMLNode; |
-} |
- |
+ if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) { |
+ m_pXMLNode->Release(); |
+ } |
+} |
CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) { |
CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); |
CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass); |
@@ -962,12 +962,17 @@ |
if (iLength >= 3) { |
bOverwrite = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; |
} |
- std::unique_ptr<IXFA_Parser> pParser(IXFA_Parser::Create(m_pDocument)); |
+ IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument); |
+ if (!pParser) { |
+ return; |
+ } |
CFDE_XMLNode* pXMLNode = NULL; |
int32_t iParserStatus = pParser->ParseXMLData(wsExpression, pXMLNode, NULL); |
- if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) |
- return; |
- |
+ if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) { |
+ pParser->Release(); |
+ pParser = NULL; |
+ return; |
+ } |
if (bIgnoreRoot && |
(pXMLNode->GetType() != FDE_XMLNODE_Element || |
XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) { |
@@ -1054,11 +1059,14 @@ |
} |
pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, false); |
} else { |
- delete pFakeXMLRoot; |
- pFakeXMLRoot = nullptr; |
- } |
-} |
- |
+ if (pFakeXMLRoot) { |
+ pFakeXMLRoot->Release(); |
+ pFakeXMLRoot = NULL; |
+ } |
+ } |
+ pParser->Release(); |
+ pParser = NULL; |
+} |
void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) { |
} |