Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(696)

Unified Diff: xfa/src/fxfa/src/parser/xfa_parser_imp.cpp

Issue 1423903002: A crasher due to lacking 'template' node in XFA file (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Upload the test file to replace a NULL file Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « testing/resources/bug_216.pdf ('k') | xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
diff --git a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
index 9e85c1f539c852461e24443a882adb910f5d899b..48547d7e9f3ec09e6b4a391402fa6a42d34cd6a7 100644
--- a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
+++ b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
@@ -386,12 +386,12 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
pXMLDocumentNode, XFA_GetPacketByIndex(XFA_PACKET_XDP)->pName,
XFA_GetPacketByIndex(XFA_PACKET_XDP)->pURI,
XFA_GetPacketByIndex(XFA_PACKET_XDP)->eFlags)) {
- return NULL;
+ return nullptr;
}
CXFA_Node* pXFARootNode =
m_pFactory->CreateNode(XFA_XDPPACKET_XDP, XFA_ELEMENT_Xfa);
if (!pXFARootNode) {
- return NULL;
+ return nullptr;
}
m_pRootNode = pXFARootNode;
pXFARootNode->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"xfa"));
@@ -408,8 +408,8 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
}
}
}
- IFDE_XMLNode* pXMLConfigDOMRoot = NULL;
- CXFA_Node* pXFAConfigDOMRoot = NULL;
+ IFDE_XMLNode* pXMLConfigDOMRoot = nullptr;
+ CXFA_Node* pXFAConfigDOMRoot = nullptr;
{
for (IFDE_XMLNode* pChildItem =
pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild);
@@ -423,7 +423,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
}
if (CXFA_Node* pChildNode =
pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) {
- return NULL;
+ return nullptr;
}
pXMLConfigDOMRoot = pChildItem;
pXFAConfigDOMRoot =
@@ -431,8 +431,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
pXFARootNode->InsertChild(pXFAConfigDOMRoot, NULL);
}
}
- IFDE_XMLNode* pXMLDatasetsDOMRoot = NULL;
- IFDE_XMLNode* pXMLFormDOMRoot = NULL;
+ IFDE_XMLNode* pXMLDatasetsDOMRoot = nullptr;
+ IFDE_XMLNode* pXMLFormDOMRoot = nullptr;
+ IFDE_XMLNode* pXMLTemplateDOMRoot = nullptr;
{
for (IFDE_XMLNode* pChildItem =
pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild);
@@ -453,7 +454,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
if (!XFA_FDEExtension_MatchNodeName(pElement, pPacketInfo->pName,
pPacketInfo->pURI,
pPacketInfo->eFlags)) {
- pPacketInfo = NULL;
+ pPacketInfo = nullptr;
}
}
XFA_XDPPACKET ePacket =
@@ -463,29 +464,41 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP(
}
if (ePacket == XFA_XDPPACKET_Datasets) {
if (pXMLDatasetsDOMRoot) {
- pXMLDatasetsDOMRoot = NULL;
- return NULL;
+ return nullptr;
}
pXMLDatasetsDOMRoot = pElement;
} else if (ePacket == XFA_XDPPACKET_Form) {
if (pXMLFormDOMRoot) {
- pXMLFormDOMRoot = NULL;
- return NULL;
+ return nullptr;
}
pXMLFormDOMRoot = pElement;
+ } else if (ePacket == XFA_XDPPACKET_Template) {
+ if (pXMLTemplateDOMRoot) {
+ // Found a duplicate template packet.
+ return nullptr;
+ }
+ CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket);
+ if (pPacketNode) {
+ pXMLTemplateDOMRoot = pElement;
+ pXFARootNode->InsertChild(pPacketNode);
+ }
} else {
CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket);
if (pPacketNode) {
if (pPacketInfo &&
(pPacketInfo->eFlags & XFA_XDPPACKET_FLAGS_SUPPORTONE) &&
pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) {
- return NULL;
+ return nullptr;
}
pXFARootNode->InsertChild(pPacketNode);
}
}
}
}
+ if (!pXMLTemplateDOMRoot) {
+ // No template is found.
+ return nullptr;
+ }
if (pXMLDatasetsDOMRoot) {
CXFA_Node* pPacketNode =
ParseAsXDPPacket(pXMLDatasetsDOMRoot, XFA_XDPPACKET_Datasets);
« no previous file with comments | « testing/resources/bug_216.pdf ('k') | xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698