| 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_parser_imp.h" | 7 #include "xfa/fxfa/parser/xfa_parser_imp.h" |
| 8 | 8 |
| 9 #include "xfa/fde/xml/fde_xml_imp.h" | 9 #include "xfa/fde/xml/fde_xml_imp.h" |
| 10 #include "xfa/fgas/crt/fgas_codepage.h" | 10 #include "xfa/fgas/crt/fgas_codepage.h" |
| 11 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 11 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
| 12 #include "xfa/fxfa/parser/xfa_basic_imp.h" | 12 #include "xfa/fxfa/parser/xfa_basic_imp.h" |
| 13 #include "xfa/fxfa/parser/xfa_docdata.h" | 13 #include "xfa/fxfa/parser/xfa_docdata.h" |
| 14 #include "xfa/fxfa/parser/xfa_doclayout.h" | 14 #include "xfa/fxfa/parser/xfa_doclayout.h" |
| 15 #include "xfa/fxfa/parser/xfa_document.h" | 15 #include "xfa/fxfa/parser/xfa_document.h" |
| 16 #include "xfa/fxfa/parser/xfa_localemgr.h" | 16 #include "xfa/fxfa/parser/xfa_localemgr.h" |
| 17 #include "xfa/fxfa/parser/xfa_object.h" | 17 #include "xfa/fxfa/parser/xfa_object.h" |
| 18 #include "xfa/fxfa/parser/xfa_parser.h" | 18 #include "xfa/fxfa/parser/xfa_parser.h" |
| 19 #include "xfa/fxfa/parser/xfa_script.h" | 19 #include "xfa/fxfa/parser/xfa_script.h" |
| 20 #include "xfa/fxfa/parser/xfa_utils.h" | 20 #include "xfa/fxfa/parser/xfa_utils.h" |
| 21 #include "xfa/include/fxfa/xfa_checksum.h" |
| 21 | 22 |
| 22 IXFA_Parser* IXFA_Parser::Create(IXFA_ObjFactory* pFactory, | 23 IXFA_Parser* IXFA_Parser::Create(CXFA_Document* pFactory, |
| 23 FX_BOOL bDocumentParser) { | 24 FX_BOOL bDocumentParser) { |
| 24 return new CXFA_SimpleParser(pFactory, bDocumentParser); | 25 return new CXFA_SimpleParser(pFactory, bDocumentParser); |
| 25 } | 26 } |
| 26 CXFA_SimpleParser::CXFA_SimpleParser(IXFA_ObjFactory* pFactory, | 27 CXFA_SimpleParser::CXFA_SimpleParser(CXFA_Document* pFactory, |
| 27 FX_BOOL bDocumentParser) | 28 FX_BOOL bDocumentParser) |
| 28 : m_pXMLParser(nullptr), | 29 : m_pXMLParser(nullptr), |
| 29 m_pXMLDoc(nullptr), | 30 m_pXMLDoc(nullptr), |
| 30 m_pStream(nullptr), | 31 m_pStream(nullptr), |
| 31 m_pFileRead(nullptr), | 32 m_pFileRead(nullptr), |
| 32 m_pFactory(pFactory), | 33 m_pFactory(pFactory), |
| 33 m_pRootNode(nullptr), | 34 m_pRootNode(nullptr), |
| 34 m_ePacketID(XFA_XDPPACKET_UNKNOWN), | 35 m_ePacketID(XFA_XDPPACKET_UNKNOWN), |
| 35 m_bDocumentParser(bDocumentParser) {} | 36 m_bDocumentParser(bDocumentParser) {} |
| 36 CXFA_SimpleParser::~CXFA_SimpleParser() { | 37 CXFA_SimpleParser::~CXFA_SimpleParser() { |
| 37 CloseParser(); | 38 CloseParser(); |
| 38 } | 39 } |
| 39 void CXFA_SimpleParser::SetFactory(IXFA_ObjFactory* pFactory) { | 40 void CXFA_SimpleParser::SetFactory(CXFA_Document* pFactory) { |
| 40 m_pFactory = pFactory; | 41 m_pFactory = pFactory; |
| 41 } | 42 } |
| 42 static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode( | 43 static CFDE_XMLNode* XFA_FDEExtension_GetDocumentNode( |
| 43 CFDE_XMLDoc* pXMLDoc, | 44 CFDE_XMLDoc* pXMLDoc, |
| 44 FX_BOOL bVerifyWellFormness = FALSE) { | 45 FX_BOOL bVerifyWellFormness = FALSE) { |
| 45 if (!pXMLDoc) { | 46 if (!pXMLDoc) { |
| 46 return NULL; | 47 return NULL; |
| 47 } | 48 } |
| 48 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot(); | 49 CFDE_XMLNode* pXMLFakeRoot = pXMLDoc->GetRoot(); |
| 49 for (CFDE_XMLNode* pXMLNode = | 50 for (CFDE_XMLNode* pXMLNode = |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI, | 558 XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI, |
| 558 XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) { | 559 XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) { |
| 559 CFDE_XMLElement* pXMLDocumentElement = | 560 CFDE_XMLElement* pXMLDocumentElement = |
| 560 static_cast<CFDE_XMLElement*>(pXMLDocumentNode); | 561 static_cast<CFDE_XMLElement*>(pXMLDocumentNode); |
| 561 CFX_WideString wsChecksum; | 562 CFX_WideString wsChecksum; |
| 562 pXMLDocumentElement->GetString(L"checksum", wsChecksum); | 563 pXMLDocumentElement->GetString(L"checksum", wsChecksum); |
| 563 if (wsChecksum.GetLength() != 28 || | 564 if (wsChecksum.GetLength() != 28 || |
| 564 m_pXMLParser->m_dwCheckStatus != 0x03) { | 565 m_pXMLParser->m_dwCheckStatus != 0x03) { |
| 565 return NULL; | 566 return NULL; |
| 566 } | 567 } |
| 567 IXFA_ChecksumContext* pChecksum = XFA_Checksum_Create(); | 568 CXFA_ChecksumContext* pChecksum = new CXFA_ChecksumContext; |
| 568 pChecksum->StartChecksum(); | 569 pChecksum->StartChecksum(); |
| 569 pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[0], | 570 pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[0], |
| 570 m_pXMLParser->m_nSize[0]); | 571 m_pXMLParser->m_nSize[0]); |
| 571 pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[1], | 572 pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[1], |
| 572 m_pXMLParser->m_nSize[1]); | 573 m_pXMLParser->m_nSize[1]); |
| 573 pChecksum->FinishChecksum(); | 574 pChecksum->FinishChecksum(); |
| 574 CFX_ByteString bsCheck; | 575 CFX_ByteString bsCheck; |
| 575 pChecksum->GetChecksum(bsCheck); | 576 pChecksum->GetChecksum(bsCheck); |
| 576 pChecksum->Release(); | 577 pChecksum->Release(); |
| 577 if (bsCheck != wsChecksum.UTF8Encode()) { | 578 if (bsCheck != wsChecksum.UTF8Encode()) { |
| (...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 void CXFA_SimpleParser::CloseParser() { | 1336 void CXFA_SimpleParser::CloseParser() { |
| 1336 if (m_pXMLDoc) { | 1337 if (m_pXMLDoc) { |
| 1337 m_pXMLDoc->Release(); | 1338 m_pXMLDoc->Release(); |
| 1338 m_pXMLDoc = NULL; | 1339 m_pXMLDoc = NULL; |
| 1339 } | 1340 } |
| 1340 if (m_pStream) { | 1341 if (m_pStream) { |
| 1341 m_pStream->Release(); | 1342 m_pStream->Release(); |
| 1342 m_pStream = NULL; | 1343 m_pStream = NULL; |
| 1343 } | 1344 } |
| 1344 } | 1345 } |
| 1345 IXFA_DocParser* IXFA_DocParser::Create(IXFA_Notify* pNotify) { | 1346 |
| 1346 return new CXFA_DocumentParser(pNotify); | 1347 CXFA_DocumentParser::CXFA_DocumentParser(CXFA_FFNotify* pNotify) |
| 1347 } | |
| 1348 CXFA_DocumentParser::CXFA_DocumentParser(IXFA_Notify* pNotify) | |
| 1349 : m_nodeParser(NULL, TRUE), m_pNotify(pNotify), m_pDocument(NULL) {} | 1348 : m_nodeParser(NULL, TRUE), m_pNotify(pNotify), m_pDocument(NULL) {} |
| 1350 CXFA_DocumentParser::~CXFA_DocumentParser() { | 1349 CXFA_DocumentParser::~CXFA_DocumentParser() { |
| 1351 CloseParser(); | 1350 CloseParser(); |
| 1352 } | 1351 } |
| 1353 int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream, | 1352 int32_t CXFA_DocumentParser::StartParse(IFX_FileRead* pStream, |
| 1354 XFA_XDPPACKET ePacketID) { | 1353 XFA_XDPPACKET ePacketID) { |
| 1355 CloseParser(); | 1354 CloseParser(); |
| 1356 int32_t nRetStatus = m_nodeParser.StartParse(pStream, ePacketID); | 1355 int32_t nRetStatus = m_nodeParser.StartParse(pStream, ePacketID); |
| 1357 if (nRetStatus == XFA_PARSESTATUS_Ready) { | 1356 if (nRetStatus == XFA_PARSESTATUS_Ready) { |
| 1358 m_pDocument = new CXFA_Document(this); | 1357 m_pDocument = new CXFA_Document(this); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 break; | 1555 break; |
| 1557 } | 1556 } |
| 1558 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { | 1557 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { |
| 1559 break; | 1558 break; |
| 1560 } | 1559 } |
| 1561 } | 1560 } |
| 1562 return (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || m_NodeStack.GetSize() != 1) | 1561 return (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || m_NodeStack.GetSize() != 1) |
| 1563 ? -1 | 1562 ? -1 |
| 1564 : m_pParser->GetStatus(); | 1563 : m_pParser->GetStatus(); |
| 1565 } | 1564 } |
| OLD | NEW |