From ec44186fdbca423eddf432be8b5c38914674023a Mon Sep 17 00:00:00 2001 From: Jun Fang Date: Mon, 26 Oct 2015 21:07:08 +0800 Subject: Add an embedded test case --- xfa/src/fxfa/src/parser/xfa_parser_imp.cpp | 16 +++++++++++++++- xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp (limited to 'xfa/src') diff --git a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp index 9e85c1f539..66258980e5 100644 --- a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp +++ b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp @@ -433,6 +433,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( } IFDE_XMLNode* pXMLDatasetsDOMRoot = NULL; IFDE_XMLNode* pXMLFormDOMRoot = NULL; + IFDE_XMLNode* pXMLTemplateDOMRoot = NULL; { for (IFDE_XMLNode* pChildItem = pXMLDocumentNode->GetNodeItem(IFDE_XMLNode::FirstChild); @@ -473,7 +474,17 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( return NULL; } pXMLFormDOMRoot = pElement; - } else { + } else if (ePacket == XFA_XDPPACKET_Template) { + if (pXMLTemplateDOMRoot) { + // Find a duplicate template packet + return NULL; + } + CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); + if (pPacketNode) { + pXMLTemplateDOMRoot = pElement; + pXFARootNode->InsertChild(pPacketNode); + } + } else { CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); if (pPacketNode) { if (pPacketInfo && @@ -486,6 +497,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( } } } + if (!pXMLTemplateDOMRoot) { + return NULL; + } if (pXMLDatasetsDOMRoot) { CXFA_Node* pPacketNode = ParseAsXDPPacket(pXMLDatasetsDOMRoot, XFA_XDPPACKET_Datasets); diff --git a/xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp b/xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp new file mode 100644 index 0000000000..8bff2f6874 --- /dev/null +++ b/xfa/src/fxfa/src/parser/xfa_parser_imp_embeddertest.cpp @@ -0,0 +1,15 @@ +// Copyright 2015 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "../../../../../testing/embedder_test.h" +#include "testing/gtest/include/gtest/gtest.h" + +class XFAParserImpEmbeddertest : public EmbedderTest {}; + +TEST_F(XFAParserImpEmbeddertest, Bug_216) { + EXPECT_TRUE(OpenDocument("testing/resources/bug_216.pdf")); + FPDF_PAGE page = LoadPage(0); + EXPECT_NE(nullptr, page); + UnloadPage(page); +} \ No newline at end of file -- cgit v1.2.3