OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/parser/xfa_object.h" | 7 #include "xfa/fxfa/parser/xfa_object.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 CXFA_Node::~CXFA_Node() { | 113 CXFA_Node::~CXFA_Node() { |
114 ASSERT(m_pParent == NULL); | 114 ASSERT(m_pParent == NULL); |
115 RemoveMapModuleKey(); | 115 RemoveMapModuleKey(); |
116 CXFA_Node *pNext, *pNode = m_pChild; | 116 CXFA_Node *pNext, *pNode = m_pChild; |
117 while (pNode) { | 117 while (pNode) { |
118 pNext = pNode->m_pNext; | 118 pNext = pNode->m_pNext; |
119 pNode->m_pParent = NULL; | 119 pNode->m_pParent = NULL; |
120 delete pNode; | 120 delete pNode; |
121 pNode = pNext; | 121 pNode = pNext; |
122 } | 122 } |
123 if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) | 123 if (m_pXMLNode && HasFlag(XFA_NODEFLAG_OwnXMLNode)) { |
124 delete m_pXMLNode; | 124 m_pXMLNode->Release(); |
| 125 } |
125 } | 126 } |
126 | |
127 CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) { | 127 CXFA_Node* CXFA_Node::Clone(FX_BOOL bRecursive) { |
128 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); | 128 CXFA_Document* pFactory = m_pDocument->GetParser()->GetFactory(); |
129 CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass); | 129 CXFA_Node* pClone = pFactory->CreateNode(m_ePacket, m_eNodeClass); |
130 if (!pClone) { | 130 if (!pClone) { |
131 return NULL; | 131 return NULL; |
132 } | 132 } |
133 MergeAllData(pClone); | 133 MergeAllData(pClone); |
134 pClone->UpdateNameHash(); | 134 pClone->UpdateNameHash(); |
135 if (IsNeedSavingXMLNode()) { | 135 if (IsNeedSavingXMLNode()) { |
136 CFDE_XMLNode* pCloneXML = NULL; | 136 CFDE_XMLNode* pCloneXML = NULL; |
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 if (wsExpression.IsEmpty()) { | 955 if (wsExpression.IsEmpty()) { |
956 return; | 956 return; |
957 } | 957 } |
958 } | 958 } |
959 if (iLength >= 2) { | 959 if (iLength >= 2) { |
960 bIgnoreRoot = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; | 960 bIgnoreRoot = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; |
961 } | 961 } |
962 if (iLength >= 3) { | 962 if (iLength >= 3) { |
963 bOverwrite = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; | 963 bOverwrite = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; |
964 } | 964 } |
965 std::unique_ptr<IXFA_Parser> pParser(IXFA_Parser::Create(m_pDocument)); | 965 IXFA_Parser* pParser = IXFA_Parser::Create(m_pDocument); |
| 966 if (!pParser) { |
| 967 return; |
| 968 } |
966 CFDE_XMLNode* pXMLNode = NULL; | 969 CFDE_XMLNode* pXMLNode = NULL; |
967 int32_t iParserStatus = pParser->ParseXMLData(wsExpression, pXMLNode, NULL); | 970 int32_t iParserStatus = pParser->ParseXMLData(wsExpression, pXMLNode, NULL); |
968 if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) | 971 if (iParserStatus != XFA_PARSESTATUS_Done || !pXMLNode) { |
| 972 pParser->Release(); |
| 973 pParser = NULL; |
969 return; | 974 return; |
970 | 975 } |
971 if (bIgnoreRoot && | 976 if (bIgnoreRoot && |
972 (pXMLNode->GetType() != FDE_XMLNODE_Element || | 977 (pXMLNode->GetType() != FDE_XMLNODE_Element || |
973 XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) { | 978 XFA_RecognizeRichText(static_cast<CFDE_XMLElement*>(pXMLNode)))) { |
974 bIgnoreRoot = FALSE; | 979 bIgnoreRoot = FALSE; |
975 } | 980 } |
976 CXFA_Node* pFakeRoot = Clone(FALSE); | 981 CXFA_Node* pFakeRoot = Clone(FALSE); |
977 CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType); | 982 CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType); |
978 if (!wsContentType.IsEmpty()) { | 983 if (!wsContentType.IsEmpty()) { |
979 pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType, | 984 pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType, |
980 CFX_WideString(wsContentType)); | 985 CFX_WideString(wsContentType)); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 pChild->SetFlag(XFA_NODEFLAG_Initialized, true); | 1052 pChild->SetFlag(XFA_NODEFLAG_Initialized, true); |
1048 pChild = pItem; | 1053 pChild = pItem; |
1049 } | 1054 } |
1050 } | 1055 } |
1051 if (pFakeXMLRoot) { | 1056 if (pFakeXMLRoot) { |
1052 pFakeRoot->SetXMLMappingNode(pFakeXMLRoot); | 1057 pFakeRoot->SetXMLMappingNode(pFakeXMLRoot); |
1053 pFakeRoot->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); | 1058 pFakeRoot->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); |
1054 } | 1059 } |
1055 pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, false); | 1060 pFakeRoot->SetFlag(XFA_NODEFLAG_HasRemoved, false); |
1056 } else { | 1061 } else { |
1057 delete pFakeXMLRoot; | 1062 if (pFakeXMLRoot) { |
1058 pFakeXMLRoot = nullptr; | 1063 pFakeXMLRoot->Release(); |
| 1064 pFakeXMLRoot = NULL; |
| 1065 } |
1059 } | 1066 } |
| 1067 pParser->Release(); |
| 1068 pParser = NULL; |
1060 } | 1069 } |
1061 | |
1062 void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) { | 1070 void CXFA_Node::Script_NodeClass_SaveFilteredXML(CFXJSE_Arguments* pArguments) { |
1063 } | 1071 } |
1064 | 1072 |
1065 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) { | 1073 void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) { |
1066 int32_t iLength = pArguments->GetLength(); | 1074 int32_t iLength = pArguments->GetLength(); |
1067 if (iLength < 0 || iLength > 1) { | 1075 if (iLength < 0 || iLength > 1) { |
1068 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML"); | 1076 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"saveXML"); |
1069 return; | 1077 return; |
1070 } | 1078 } |
1071 FX_BOOL bPrettyMode = FALSE; | 1079 FX_BOOL bPrettyMode = FALSE; |
(...skipping 4285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5357 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); | 5365 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); |
5358 } | 5366 } |
5359 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { | 5367 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { |
5360 return m_pAttachNode->RemoveChild(pNode); | 5368 return m_pAttachNode->RemoveChild(pNode); |
5361 } | 5369 } |
5362 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { | 5370 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { |
5363 return m_pAttachNode->GetChild( | 5371 return m_pAttachNode->GetChild( |
5364 iIndex, XFA_ELEMENT_UNKNOWN, | 5372 iIndex, XFA_ELEMENT_UNKNOWN, |
5365 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); | 5373 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); |
5366 } | 5374 } |
OLD | NEW |