| 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" |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 for (; pNode != pFakeRoot; pNode = static_cast<CFDE_XMLElement*>( | 210 for (; pNode != pFakeRoot; pNode = static_cast<CFDE_XMLElement*>( |
| 211 pNode->GetNodeItem(CFDE_XMLNode::Parent))) { | 211 pNode->GetNodeItem(CFDE_XMLNode::Parent))) { |
| 212 if (pNode->GetType() != FDE_XMLNODE_Element) { | 212 if (pNode->GetType() != FDE_XMLNODE_Element) { |
| 213 continue; | 213 continue; |
| 214 } | 214 } |
| 215 if (pNode->HasAttribute(wsNSAttribute.c_str())) { | 215 if (pNode->HasAttribute(wsNSAttribute.c_str())) { |
| 216 pNode->GetString(wsNSAttribute.c_str(), wsNamespaceURI); | 216 pNode->GetString(wsNSAttribute.c_str(), wsNamespaceURI); |
| 217 return TRUE; | 217 return TRUE; |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 wsNamespaceURI.Empty(); | 220 wsNamespaceURI.clear(); |
| 221 return bRet; | 221 return bRet; |
| 222 } | 222 } |
| 223 static inline void XFA_FDEExtension_GetElementTagNamespaceURI( | 223 static inline void XFA_FDEExtension_GetElementTagNamespaceURI( |
| 224 CFDE_XMLElement* pElement, | 224 CFDE_XMLElement* pElement, |
| 225 CFX_WideString& wsNamespaceURI) { | 225 CFX_WideString& wsNamespaceURI) { |
| 226 CFX_WideString wsNodeStr; | 226 CFX_WideString wsNodeStr; |
| 227 pElement->GetNamespacePrefix(wsNodeStr); | 227 pElement->GetNamespacePrefix(wsNodeStr); |
| 228 if (!XFA_FDEExtension_ResolveNamespaceQualifier( | 228 if (!XFA_FDEExtension_ResolveNamespaceQualifier( |
| 229 pElement, wsNodeStr.AsStringC(), wsNamespaceURI)) { | 229 pElement, wsNodeStr.AsStringC(), wsNamespaceURI)) { |
| 230 wsNamespaceURI.Empty(); | 230 wsNamespaceURI.clear(); |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 static FX_BOOL XFA_FDEExtension_MatchNodeName( | 233 static FX_BOOL XFA_FDEExtension_MatchNodeName( |
| 234 CFDE_XMLNode* pNode, | 234 CFDE_XMLNode* pNode, |
| 235 const CFX_WideStringC& wsLocalTagName, | 235 const CFX_WideStringC& wsLocalTagName, |
| 236 const CFX_WideStringC& wsNamespaceURIPrefix, | 236 const CFX_WideStringC& wsNamespaceURIPrefix, |
| 237 uint32_t eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) { | 237 uint32_t eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) { |
| 238 if (!pNode || pNode->GetType() != FDE_XMLNODE_Element) { | 238 if (!pNode || pNode->GetType() != FDE_XMLNODE_Element) { |
| 239 return FALSE; | 239 return FALSE; |
| 240 } | 240 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 wsLocalAttrName)) { | 278 wsLocalAttrName)) { |
| 279 wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() - | 279 wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() - |
| 280 wsLocalAttrName.GetLength() - 1); | 280 wsLocalAttrName.GetLength() - 1); |
| 281 } | 281 } |
| 282 if (wsLocalAttrName == FX_WSTRC(L"xmlns") || | 282 if (wsLocalAttrName == FX_WSTRC(L"xmlns") || |
| 283 wsNSPrefix == FX_WSTRC(L"xmlns") || wsNSPrefix == FX_WSTRC(L"xml")) { | 283 wsNSPrefix == FX_WSTRC(L"xmlns") || wsNSPrefix == FX_WSTRC(L"xml")) { |
| 284 return FALSE; | 284 return FALSE; |
| 285 } | 285 } |
| 286 if (!XFA_FDEExtension_ResolveNamespaceQualifier( | 286 if (!XFA_FDEExtension_ResolveNamespaceQualifier( |
| 287 pElement, wsNSPrefix.AsStringC(), wsNamespaceURI)) { | 287 pElement, wsNSPrefix.AsStringC(), wsNamespaceURI)) { |
| 288 wsNamespaceURI.Empty(); | 288 wsNamespaceURI.clear(); |
| 289 return FALSE; | 289 return FALSE; |
| 290 } | 290 } |
| 291 return TRUE; | 291 return TRUE; |
| 292 } | 292 } |
| 293 static FX_BOOL XFA_FDEExtension_FindAttributeWithNS( | 293 static FX_BOOL XFA_FDEExtension_FindAttributeWithNS( |
| 294 CFDE_XMLElement* pElement, | 294 CFDE_XMLElement* pElement, |
| 295 const CFX_WideStringC& wsLocalAttributeName, | 295 const CFX_WideStringC& wsLocalAttributeName, |
| 296 const CFX_WideStringC& wsNamespaceURIPrefix, | 296 const CFX_WideStringC& wsNamespaceURIPrefix, |
| 297 CFX_WideString& wsValue, | 297 CFX_WideString& wsValue, |
| 298 FX_BOOL bMatchNSAsPrefix = FALSE) { | 298 FX_BOOL bMatchNSAsPrefix = FALSE) { |
| (...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1311 if (!m_bDocumentParser) { | 1311 if (!m_bDocumentParser) { |
| 1312 return; | 1312 return; |
| 1313 } | 1313 } |
| 1314 CFX_WideString wsTargetName; | 1314 CFX_WideString wsTargetName; |
| 1315 pXMLInstruction->GetTargetName(wsTargetName); | 1315 pXMLInstruction->GetTargetName(wsTargetName); |
| 1316 if (wsTargetName == FX_WSTRC(L"originalXFAVersion")) { | 1316 if (wsTargetName == FX_WSTRC(L"originalXFAVersion")) { |
| 1317 CFX_WideString wsData; | 1317 CFX_WideString wsData; |
| 1318 if (pXMLInstruction->GetData(0, wsData) && | 1318 if (pXMLInstruction->GetData(0, wsData) && |
| 1319 (pXFANode->GetDocument()->RecognizeXFAVersionNumber(wsData) != | 1319 (pXFANode->GetDocument()->RecognizeXFAVersionNumber(wsData) != |
| 1320 XFA_VERSION_UNKNOWN)) { | 1320 XFA_VERSION_UNKNOWN)) { |
| 1321 wsData.Empty(); | 1321 wsData.clear(); |
| 1322 if (pXMLInstruction->GetData(1, wsData) && | 1322 if (pXMLInstruction->GetData(1, wsData) && |
| 1323 wsData == FX_WSTRC(L"v2.7-scripting:1")) { | 1323 wsData == FX_WSTRC(L"v2.7-scripting:1")) { |
| 1324 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, TRUE); | 1324 pXFANode->GetDocument()->SetFlag(XFA_DOCFLAG_Scripting, TRUE); |
| 1325 } | 1325 } |
| 1326 } | 1326 } |
| 1327 } else if (wsTargetName == FX_WSTRC(L"acrobat")) { | 1327 } else if (wsTargetName == FX_WSTRC(L"acrobat")) { |
| 1328 CFX_WideString wsData; | 1328 CFX_WideString wsData; |
| 1329 if (pXMLInstruction->GetData(0, wsData) && | 1329 if (pXMLInstruction->GetData(0, wsData) && |
| 1330 wsData == FX_WSTRC(L"JavaScript")) { | 1330 wsData == FX_WSTRC(L"JavaScript")) { |
| 1331 if (pXMLInstruction->GetData(1, wsData) && | 1331 if (pXMLInstruction->GetData(1, wsData) && |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1412 ASSERT(m_pParent && m_pStream); | 1412 ASSERT(m_pParent && m_pStream); |
| 1413 m_NodeStack.Push(m_pParent); | 1413 m_NodeStack.Push(m_pParent); |
| 1414 m_pParser = new CFDE_XMLSyntaxParser; | 1414 m_pParser = new CFDE_XMLSyntaxParser; |
| 1415 m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024); | 1415 m_pParser->Init(m_pStream, 32 * 1024, 1024 * 1024); |
| 1416 } | 1416 } |
| 1417 CXFA_XMLParser::~CXFA_XMLParser() { | 1417 CXFA_XMLParser::~CXFA_XMLParser() { |
| 1418 if (m_pParser) { | 1418 if (m_pParser) { |
| 1419 m_pParser->Release(); | 1419 m_pParser->Release(); |
| 1420 } | 1420 } |
| 1421 m_NodeStack.RemoveAll(); | 1421 m_NodeStack.RemoveAll(); |
| 1422 m_ws1.Empty(); | 1422 m_ws1.clear(); |
| 1423 m_ws2.Empty(); | 1423 m_ws2.clear(); |
| 1424 } | 1424 } |
| 1425 int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) { | 1425 int32_t CXFA_XMLParser::DoParser(IFX_Pause* pPause) { |
| 1426 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error) | 1426 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error) |
| 1427 return -1; | 1427 return -1; |
| 1428 if (m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) | 1428 if (m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) |
| 1429 return 100; | 1429 return 100; |
| 1430 | 1430 |
| 1431 int32_t iCount = 0; | 1431 int32_t iCount = 0; |
| 1432 while (TRUE) { | 1432 while (TRUE) { |
| 1433 m_syntaxParserResult = m_pParser->DoSyntaxParse(); | 1433 m_syntaxParserResult = m_pParser->DoSyntaxParse(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 break; | 1478 break; |
| 1479 case FDE_XmlSyntaxResult::TargetName: | 1479 case FDE_XmlSyntaxResult::TargetName: |
| 1480 m_pParser->GetTargetName(m_ws1); | 1480 m_pParser->GetTargetName(m_ws1); |
| 1481 if (m_ws1 == FX_WSTRC(L"originalXFAVersion") || | 1481 if (m_ws1 == FX_WSTRC(L"originalXFAVersion") || |
| 1482 m_ws1 == FX_WSTRC(L"acrobat")) { | 1482 m_ws1 == FX_WSTRC(L"acrobat")) { |
| 1483 m_pChild = new CFDE_XMLInstruction(m_ws1); | 1483 m_pChild = new CFDE_XMLInstruction(m_ws1); |
| 1484 m_pParent->InsertChildNode(m_pChild); | 1484 m_pParent->InsertChildNode(m_pChild); |
| 1485 } else { | 1485 } else { |
| 1486 m_pChild = NULL; | 1486 m_pChild = NULL; |
| 1487 } | 1487 } |
| 1488 m_ws1.Empty(); | 1488 m_ws1.clear(); |
| 1489 break; | 1489 break; |
| 1490 case FDE_XmlSyntaxResult::TagName: | 1490 case FDE_XmlSyntaxResult::TagName: |
| 1491 m_pParser->GetTagName(m_ws1); | 1491 m_pParser->GetTagName(m_ws1); |
| 1492 m_pChild = new CFDE_XMLElement(m_ws1); | 1492 m_pChild = new CFDE_XMLElement(m_ws1); |
| 1493 m_pParent->InsertChildNode(m_pChild); | 1493 m_pParent->InsertChildNode(m_pChild); |
| 1494 m_NodeStack.Push(m_pChild); | 1494 m_NodeStack.Push(m_pChild); |
| 1495 m_pParent = m_pChild; | 1495 m_pParent = m_pChild; |
| 1496 | 1496 |
| 1497 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) { | 1497 if (m_dwCheckStatus != 0x03 && m_NodeStack.GetSize() == 3) { |
| 1498 CFX_WideString wsTag; | 1498 CFX_WideString wsTag; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1513 case FDE_XmlSyntaxResult::AttriName: | 1513 case FDE_XmlSyntaxResult::AttriName: |
| 1514 m_pParser->GetAttributeName(m_ws1); | 1514 m_pParser->GetAttributeName(m_ws1); |
| 1515 break; | 1515 break; |
| 1516 case FDE_XmlSyntaxResult::AttriValue: | 1516 case FDE_XmlSyntaxResult::AttriValue: |
| 1517 if (m_pChild) { | 1517 if (m_pChild) { |
| 1518 m_pParser->GetAttributeName(m_ws2); | 1518 m_pParser->GetAttributeName(m_ws2); |
| 1519 if (m_pChild->GetType() == FDE_XMLNODE_Element) { | 1519 if (m_pChild->GetType() == FDE_XMLNODE_Element) { |
| 1520 static_cast<CFDE_XMLElement*>(m_pChild)->SetString(m_ws1, m_ws2); | 1520 static_cast<CFDE_XMLElement*>(m_pChild)->SetString(m_ws1, m_ws2); |
| 1521 } | 1521 } |
| 1522 } | 1522 } |
| 1523 m_ws1.Empty(); | 1523 m_ws1.clear(); |
| 1524 break; | 1524 break; |
| 1525 case FDE_XmlSyntaxResult::Text: | 1525 case FDE_XmlSyntaxResult::Text: |
| 1526 m_pParser->GetTextData(m_ws1); | 1526 m_pParser->GetTextData(m_ws1); |
| 1527 m_pChild = new CFDE_XMLText(m_ws1); | 1527 m_pChild = new CFDE_XMLText(m_ws1); |
| 1528 m_pParent->InsertChildNode(m_pChild); | 1528 m_pParent->InsertChildNode(m_pChild); |
| 1529 m_pChild = m_pParent; | 1529 m_pChild = m_pParent; |
| 1530 break; | 1530 break; |
| 1531 case FDE_XmlSyntaxResult::CData: | 1531 case FDE_XmlSyntaxResult::CData: |
| 1532 m_pParser->GetTextData(m_ws1); | 1532 m_pParser->GetTextData(m_ws1); |
| 1533 m_pChild = new CFDE_XMLCharData(m_ws1); | 1533 m_pChild = new CFDE_XMLCharData(m_ws1); |
| 1534 m_pParent->InsertChildNode(m_pChild); | 1534 m_pParent->InsertChildNode(m_pChild); |
| 1535 m_pChild = m_pParent; | 1535 m_pChild = m_pParent; |
| 1536 break; | 1536 break; |
| 1537 case FDE_XmlSyntaxResult::TargetData: | 1537 case FDE_XmlSyntaxResult::TargetData: |
| 1538 if (m_pChild) { | 1538 if (m_pChild) { |
| 1539 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { | 1539 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { |
| 1540 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; | 1540 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1541 break; | 1541 break; |
| 1542 } | 1542 } |
| 1543 if (!m_ws1.IsEmpty()) { | 1543 if (!m_ws1.IsEmpty()) { |
| 1544 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); | 1544 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); |
| 1545 } | 1545 } |
| 1546 m_pParser->GetTargetData(m_ws1); | 1546 m_pParser->GetTargetData(m_ws1); |
| 1547 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); | 1547 static_cast<CFDE_XMLInstruction*>(m_pChild)->AppendData(m_ws1); |
| 1548 } | 1548 } |
| 1549 m_ws1.Empty(); | 1549 m_ws1.clear(); |
| 1550 break; | 1550 break; |
| 1551 default: | 1551 default: |
| 1552 break; | 1552 break; |
| 1553 } | 1553 } |
| 1554 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || | 1554 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || |
| 1555 m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { | 1555 m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
| 1556 break; | 1556 break; |
| 1557 } | 1557 } |
| 1558 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { | 1558 if (pPause && iCount > 500 && pPause->NeedToPauseNow()) { |
| 1559 break; | 1559 break; |
| 1560 } | 1560 } |
| 1561 } | 1561 } |
| 1562 return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || | 1562 return (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || |
| 1563 m_NodeStack.GetSize() != 1) | 1563 m_NodeStack.GetSize() != 1) |
| 1564 ? -1 | 1564 ? -1 |
| 1565 : m_pParser->GetStatus(); | 1565 : m_pParser->GetStatus(); |
| 1566 } | 1566 } |
| OLD | NEW |