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 |