diff options
-rw-r--r-- | BUILD.gn | 1 | ||||
-rw-r--r-- | xfa/fxfa/fxfa_basic.h | 8 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_dataexporter.cpp | 6 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_document.cpp | 6 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_simple_parser.cpp | 221 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_basic_data.h | 3 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_basic_data_packets.cpp | 54 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_utils.cpp | 24 | ||||
-rw-r--r-- | xfa/fxfa/parser/xfa_utils.h | 3 |
9 files changed, 137 insertions, 189 deletions
@@ -2517,7 +2517,6 @@ if (pdf_enable_xfa) { "xfa/fxfa/parser/xfa_basic_data.h", "xfa/fxfa/parser/xfa_basic_data_element_script.cpp", "xfa/fxfa/parser/xfa_basic_data_enum.cpp", - "xfa/fxfa/parser/xfa_basic_data_packets.cpp", "xfa/fxfa/parser/xfa_document_datamerger_imp.cpp", "xfa/fxfa/parser/xfa_document_datamerger_imp.h", "xfa/fxfa/parser/xfa_resolvenode_rs.h", diff --git a/xfa/fxfa/fxfa_basic.h b/xfa/fxfa/fxfa_basic.h index 6094512995..0f4ea37e3f 100644 --- a/xfa/fxfa/fxfa_basic.h +++ b/xfa/fxfa/fxfa_basic.h @@ -97,14 +97,6 @@ enum XFA_XDPPACKET_FLAGS { XFA_XDPPACKET_FLAGS_SUPPORTMANY = 16, }; -struct XFA_PACKETINFO { - uint32_t uHash; - const wchar_t* pName; - XFA_PacketType eName; - const wchar_t* pURI; - uint32_t eFlags; -}; - enum XFA_ATTRIBUTEENUM { XFA_ATTRIBUTEENUM_Asterisk, XFA_ATTRIBUTEENUM_Slash, diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp index 1113ba49b6..02c316d920 100644 --- a/xfa/fxfa/parser/cxfa_dataexporter.cpp +++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp @@ -22,6 +22,8 @@ namespace { +constexpr const wchar_t kFormNS[] = L"http://www.xfa.org/schema/xfa-form/"; + WideString ExportEncodeAttribute(const WideString& str) { CFX_WideTextBuf textBuf; int32_t iLen = str.GetLength(); @@ -402,9 +404,7 @@ void XFA_DataExporter_RegenerateFormFile( pStream->WriteString(L"\""); } pStream->WriteString(L" xmlns=\""); - - const wchar_t* pURI = XFA_GetPacketByIndex(XFA_PacketType::Form)->pURI; - pStream->WriteString(WideStringView(pURI, wcslen(pURI))); + pStream->WriteString(WideStringView(kFormNS)); WideString wsVersionNumber; RecognizeXFAVersionNumber( diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp index b23ba68a45..a737baaafb 100644 --- a/xfa/fxfa/parser/cxfa_document.cpp +++ b/xfa/fxfa/parser/cxfa_document.cpp @@ -25,6 +25,9 @@ namespace { +constexpr const wchar_t kTemplateNS[] = + L"http://www.xfa.org/schema/xfa-template/"; + void MergeNodeRecurse(CXFA_Document* pDocument, CXFA_Node* pDestNodeParent, CXFA_Node* pProtoNode) { @@ -295,8 +298,7 @@ CFXJSE_Engine* CXFA_Document::GetScriptContext() { XFA_VERSION CXFA_Document::RecognizeXFAVersionNumber( const WideString& wsTemplateNS) { - WideStringView wsTemplateURIPrefix = - XFA_GetPacketByIndex(XFA_PacketType::Template)->pURI; + WideStringView wsTemplateURIPrefix(kTemplateNS); size_t nPrefixLength = wsTemplateURIPrefix.GetLength(); if (WideStringView(wsTemplateNS.c_str(), wsTemplateNS.GetLength()) != wsTemplateURIPrefix) { diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp index 67d6f80b6d..0b8153fc3a 100644 --- a/xfa/fxfa/parser/cxfa_simple_parser.cpp +++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp @@ -31,6 +31,73 @@ namespace { +struct PacketInfo { + uint32_t hash; + const wchar_t* name; + XFA_PacketType packet_type; + const wchar_t* uri; + uint32_t flags; +}; +const PacketInfo PacketData[] = { + {0x0, nullptr, XFA_PacketType::User, nullptr, + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, + {0x811929d, L"sourceSet", XFA_PacketType::SourceSet, + L"http://www.xfa.org/schema/xfa-source-set/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0xb843dba, L"pdf", XFA_PacketType::Pdf, L"http://ns.adobe.com/xdp/pdf/", + XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0xc56afbf, L"xdc", XFA_PacketType::Xdc, L"http://www.xfa.org/schema/xdc/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0xc56afcc, L"xdp", XFA_PacketType::Xdp, L"http://ns.adobe.com/xdp/", + XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x132a8fbc, L"xmpmeta", XFA_PacketType::Xmpmeta, + L"http://ns.adobe.com/xmpmeta/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, + {0x48d004a8, L"xfdf", XFA_PacketType::Xfdf, L"http://ns.adobe.com/xfdf/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x4e1e39b6, L"config", XFA_PacketType::Config, + L"http://www.xfa.org/schema/xci/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x5473b6dc, L"localeSet", XFA_PacketType::LocaleSet, + L"http://www.xfa.org/schema/xfa-locale-set/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x6038580a, L"stylesheet", XFA_PacketType::Stylesheet, + L"http://www.w3.org/1999/XSL/Transform", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, + {0x803550fc, L"template", XFA_PacketType::Template, + L"http://www.xfa.org/schema/xfa-template/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x8b036f32, L"signature", XFA_PacketType::Signature, + L"http://www.w3.org/2000/09/xmldsig#", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0x99b95079, L"datasets", XFA_PacketType::Datasets, + L"http://www.xfa.org/schema/xfa-data/", + XFA_XDPPACKET_FLAGS_PREFIXMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0xcd309ff4, L"form", XFA_PacketType::Form, + L"http://www.xfa.org/schema/xfa-form/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, + {0xe14c801c, L"connectionSet", XFA_PacketType::ConnectionSet, + L"http://www.xfa.org/schema/xfa-connection-set/", + XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, +}; + +const PacketInfo* GetPacketByIndex(XFA_PacketType ePacket) { + return PacketData + static_cast<uint8_t>(ePacket); +} + +const PacketInfo* GetPacketByName(const WideStringView& wsName) { + if (wsName.IsEmpty()) + return nullptr; + + uint32_t hash = FX_HashCode_GetW(wsName, false); + auto* elem = std::lower_bound( + std::begin(PacketData), std::end(PacketData), hash, + [](const PacketInfo& a, uint32_t hash) { return a.hash < hash; }); + if (elem != std::end(PacketData) && elem->hash == hash) + return elem; + return nullptr; +} + CFX_XMLNode* GetDocumentNode(CFX_XMLDoc* pXMLDoc, bool bVerifyWellFormness = false) { if (!pXMLDoc) @@ -166,30 +233,27 @@ bool FindAttributeWithNS(CFX_XMLElement* pElement, } CFX_XMLNode* GetDataSetsFromXDP(CFX_XMLNode* pXMLDocumentNode) { - if (MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->eFlags)) { + const PacketInfo* datasets_packet = + GetPacketByIndex(XFA_PacketType::Datasets); + if (MatchNodeName(pXMLDocumentNode, datasets_packet->name, + datasets_packet->uri, datasets_packet->flags)) { return pXMLDocumentNode; } - if (!MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->eFlags)) { + + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Xdp); + if (!MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { return nullptr; } + for (CFX_XMLNode* pDatasetsNode = pXMLDocumentNode->GetNodeItem(CFX_XMLNode::FirstChild); pDatasetsNode; pDatasetsNode = pDatasetsNode->GetNodeItem(CFX_XMLNode::NextSibling)) { - if (!MatchNodeName( - pDatasetsNode, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->eFlags)) { - continue; + if (MatchNodeName(pDatasetsNode, datasets_packet->name, + datasets_packet->uri, datasets_packet->flags)) { + return pDatasetsNode; } - return pDatasetsNode; } return nullptr; } @@ -429,10 +493,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket(CFX_XMLNode* pXMLDocumentNode, CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( CFX_XMLNode* pXMLDocumentNode) { - if (!MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Xdp)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Xdp); + if (!MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { return nullptr; } @@ -460,13 +523,12 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( pXMLDocumentNode->GetNodeItem(CFX_XMLNode::FirstChild); pChildItem; pChildItem = pChildItem->GetNodeItem(CFX_XMLNode::NextSibling)) { - const XFA_PACKETINFO* pPacketInfo = - XFA_GetPacketByIndex(XFA_PacketType::Config); - if (!MatchNodeName(pChildItem, pPacketInfo->pName, pPacketInfo->pURI, - pPacketInfo->eFlags)) { + const PacketInfo* pPacketInfo = GetPacketByIndex(XFA_PacketType::Config); + if (!MatchNodeName(pChildItem, pPacketInfo->name, pPacketInfo->uri, + pPacketInfo->flags)) { continue; } - if (pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) + if (pXFARootNode->GetFirstChildByName(pPacketInfo->hash)) return nullptr; pXMLConfigDOMRoot = pChildItem; @@ -490,16 +552,16 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( CFX_XMLElement* pElement = reinterpret_cast<CFX_XMLElement*>(pChildItem); WideString wsPacketName = pElement->GetLocalTagName(); - const XFA_PACKETINFO* pPacketInfo = - XFA_GetPacketByName(wsPacketName.AsStringView()); - if (pPacketInfo && pPacketInfo->pURI) { - if (!MatchNodeName(pElement, pPacketInfo->pName, pPacketInfo->pURI, - pPacketInfo->eFlags)) { + const PacketInfo* pPacketInfo = + GetPacketByName(wsPacketName.AsStringView()); + if (pPacketInfo && pPacketInfo->uri) { + if (!MatchNodeName(pElement, pPacketInfo->name, pPacketInfo->uri, + pPacketInfo->flags)) { pPacketInfo = nullptr; } } XFA_PacketType ePacket = - pPacketInfo ? pPacketInfo->eName : XFA_PacketType::User; + pPacketInfo ? pPacketInfo->packet_type : XFA_PacketType::User; if (ePacket == XFA_PacketType::Xdp) continue; if (ePacket == XFA_PacketType::Datasets) { @@ -526,8 +588,8 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( CXFA_Node* pPacketNode = ParseAsXDPPacket(pElement, ePacket); if (pPacketNode) { if (pPacketInfo && - (pPacketInfo->eFlags & XFA_XDPPACKET_FLAGS_SUPPORTONE) && - pXFARootNode->GetFirstChildByName(pPacketInfo->uHash)) { + (pPacketInfo->flags & XFA_XDPPACKET_FLAGS_SUPPORTONE) && + pXFARootNode->GetFirstChildByName(pPacketInfo->hash)) { return nullptr; } pXFARootNode->InsertChild(pPacketNode, nullptr); @@ -559,10 +621,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_XDP( CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config( CFX_XMLNode* pXMLDocumentNode, XFA_PacketType ePacketID) { - if (!MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Config)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Config)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Config)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Config); + if (!MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { return nullptr; } CXFA_Node* pNode = @@ -570,9 +631,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Config( if (!pNode) return nullptr; - pNode->JSNode()->SetCData(XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::Config)->pName, - false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false); if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, true)) return nullptr; @@ -585,18 +644,16 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( XFA_PacketType ePacketID) { CXFA_Node* pNode = nullptr; if (ePacketID == XFA_PacketType::Template) { - if (MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Template)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Template)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Template)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Template); + if (MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { pNode = m_pFactory->CreateNode(XFA_PacketType::Template, XFA_Element::Template); if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::Template)->pName, false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, + false); if (m_bDocumentParser) { CFX_XMLElement* pXMLDocumentElement = static_cast<CFX_XMLElement*>(pXMLDocumentNode); @@ -610,10 +667,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( return nullptr; } } else if (ePacketID == XFA_PacketType::Form) { - if (MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Form)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Form)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Form)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Form); + if (MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { CFX_XMLElement* pXMLDocumentElement = static_cast<CFX_XMLElement*>(pXMLDocumentNode); WideString wsChecksum = pXMLDocumentElement->GetString(L"checksum"); @@ -637,9 +693,8 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::Form)->pName, false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, + false); pNode->JSNode()->SetAttribute(XFA_Attribute::Checksum, wsChecksum.AsStringView(), false); CXFA_Node* pTemplateRoot = @@ -667,15 +722,14 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_TemplateForm( CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data( CFX_XMLNode* pXMLDocumentNode) { CFX_XMLNode* pDatasetsXMLNode = GetDataSetsFromXDP(pXMLDocumentNode); + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Datasets); if (pDatasetsXMLNode) { CXFA_Node* pNode = m_pFactory->CreateNode(XFA_PacketType::Datasets, XFA_Element::DataModel); if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pName, false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false); if (!DataLoader(pNode, pDatasetsXMLNode, false)) return nullptr; @@ -684,9 +738,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Data( } CFX_XMLNode* pDataXMLNode = nullptr; - if (MatchNodeName(pXMLDocumentNode, L"data", - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Datasets)->eFlags)) { + if (MatchNodeName(pXMLDocumentNode, L"data", packet->uri, packet->flags)) { static_cast<CFX_XMLElement*>(pXMLDocumentNode) ->RemoveAttribute(L"xmlns:xfa"); pDataXMLNode = pXMLDocumentNode; @@ -733,54 +785,44 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet( XFA_PacketType ePacketID) { CXFA_Node* pNode = nullptr; if (ePacketID == XFA_PacketType::LocaleSet) { - if (MatchNodeName( - pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::LocaleSet)->pName, - XFA_GetPacketByIndex(XFA_PacketType::LocaleSet)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::LocaleSet)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::LocaleSet); + if (MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { pNode = m_pFactory->CreateNode(XFA_PacketType::LocaleSet, XFA_Element::LocaleSet); if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::LocaleSet)->pName, false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, + false); if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, true)) return nullptr; } } else if (ePacketID == XFA_PacketType::ConnectionSet) { - if (MatchNodeName( - pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::ConnectionSet)->pName, - XFA_GetPacketByIndex(XFA_PacketType::ConnectionSet)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::ConnectionSet)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::ConnectionSet); + if (MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { pNode = m_pFactory->CreateNode(XFA_PacketType::ConnectionSet, XFA_Element::ConnectionSet); if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::ConnectionSet)->pName, false, - false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, + false); if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, true)) return nullptr; } } else if (ePacketID == XFA_PacketType::SourceSet) { - if (MatchNodeName( - pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::SourceSet)->pName, - XFA_GetPacketByIndex(XFA_PacketType::SourceSet)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::SourceSet)->eFlags)) { + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::SourceSet); + if (MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) { pNode = m_pFactory->CreateNode(XFA_PacketType::SourceSet, XFA_Element::SourceSet); if (!pNode) return nullptr; - pNode->JSNode()->SetCData( - XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::SourceSet)->pName, false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, + false); if (!NormalLoader(pNode, pXMLDocumentNode, ePacketID, true)) return nullptr; } @@ -792,10 +834,9 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_LocaleConnectionSourceSet( CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc( CFX_XMLNode* pXMLDocumentNode) { - if (!MatchNodeName(pXMLDocumentNode, - XFA_GetPacketByIndex(XFA_PacketType::Xdc)->pName, - XFA_GetPacketByIndex(XFA_PacketType::Xdc)->pURI, - XFA_GetPacketByIndex(XFA_PacketType::Xdc)->eFlags)) + const PacketInfo* packet = GetPacketByIndex(XFA_PacketType::Xdc); + if (!MatchNodeName(pXMLDocumentNode, packet->name, packet->uri, + packet->flags)) return nullptr; CXFA_Node* pNode = @@ -803,9 +844,7 @@ CXFA_Node* CXFA_SimpleParser::ParseAsXDPPacket_Xdc( if (!pNode) return nullptr; - pNode->JSNode()->SetCData(XFA_Attribute::Name, - XFA_GetPacketByIndex(XFA_PacketType::Xdc)->pName, - false, false); + pNode->JSNode()->SetCData(XFA_Attribute::Name, packet->name, false, false); pNode->SetXMLMappingNode(pXMLDocumentNode); return pNode; } diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h index b5833ff379..60f31ca563 100644 --- a/xfa/fxfa/parser/xfa_basic_data.h +++ b/xfa/fxfa/parser/xfa_basic_data.h @@ -11,9 +11,6 @@ #include "xfa/fxfa/fxfa_basic.h" -extern const XFA_PACKETINFO g_XFAPacketData[]; -extern const int32_t g_iXFAPacketCount; - extern const XFA_ATTRIBUTEENUMINFO g_XFAEnumData[]; extern const int32_t g_iXFAEnumCount; diff --git a/xfa/fxfa/parser/xfa_basic_data_packets.cpp b/xfa/fxfa/parser/xfa_basic_data_packets.cpp deleted file mode 100644 index 91e2d3cc6e..0000000000 --- a/xfa/fxfa/parser/xfa_basic_data_packets.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 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. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fxfa/parser/xfa_basic_data.h" - -#include "xfa/fxfa/fxfa_basic.h" - -const XFA_PACKETINFO g_XFAPacketData[] = { - {0x0, nullptr, XFA_PacketType::User, nullptr, - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x811929d, L"sourceSet", XFA_PacketType::SourceSet, - L"http://www.xfa.org/schema/xfa-source-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xb843dba, L"pdf", XFA_PacketType::Pdf, L"http://ns.adobe.com/xdp/pdf/", - XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xc56afbf, L"xdc", XFA_PacketType::Xdc, L"http://www.xfa.org/schema/xdc/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xc56afcc, L"xdp", XFA_PacketType::Xdp, L"http://ns.adobe.com/xdp/", - XFA_XDPPACKET_FLAGS_COMPLETEMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x132a8fbc, L"xmpmeta", XFA_PacketType::Xmpmeta, - L"http://ns.adobe.com/xmpmeta/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x48d004a8, L"xfdf", XFA_PacketType::Xfdf, L"http://ns.adobe.com/xfdf/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x4e1e39b6, L"config", XFA_PacketType::Config, - L"http://www.xfa.org/schema/xci/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x5473b6dc, L"localeSet", XFA_PacketType::LocaleSet, - L"http://www.xfa.org/schema/xfa-locale-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x6038580a, L"stylesheet", XFA_PacketType::Stylesheet, - L"http://www.w3.org/1999/XSL/Transform", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTMANY}, - {0x803550fc, L"template", XFA_PacketType::Template, - L"http://www.xfa.org/schema/xfa-template/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x8b036f32, L"signature", XFA_PacketType::Signature, - L"http://www.w3.org/2000/09/xmldsig#", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0x99b95079, L"datasets", XFA_PacketType::Datasets, - L"http://www.xfa.org/schema/xfa-data/", - XFA_XDPPACKET_FLAGS_PREFIXMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xcd309ff4, L"form", XFA_PacketType::Form, - L"http://www.xfa.org/schema/xfa-form/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, - {0xe14c801c, L"connectionSet", XFA_PacketType::ConnectionSet, - L"http://www.xfa.org/schema/xfa-connection-set/", - XFA_XDPPACKET_FLAGS_NOMATCH | XFA_XDPPACKET_FLAGS_SUPPORTONE}, -}; -const int32_t g_iXFAPacketCount = - sizeof(g_XFAPacketData) / sizeof(XFA_PACKETINFO); diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp index a7b31aebec..529420a93a 100644 --- a/xfa/fxfa/parser/xfa_utils.cpp +++ b/xfa/fxfa/parser/xfa_utils.cpp @@ -185,27 +185,3 @@ const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName( } return nullptr; } - -const XFA_PACKETINFO* XFA_GetPacketByIndex(XFA_PacketType ePacket) { - return g_XFAPacketData + static_cast<uint8_t>(ePacket); -} - -const XFA_PACKETINFO* XFA_GetPacketByName(const WideStringView& wsName) { - if (wsName.IsEmpty()) - return nullptr; - - uint32_t uHash = FX_HashCode_GetW(wsName, false); - int32_t iStart = 0; - int32_t iEnd = g_iXFAPacketCount - 1; - do { - int32_t iMid = (iStart + iEnd) / 2; - const XFA_PACKETINFO* pInfo = g_XFAPacketData + iMid; - if (uHash == pInfo->uHash) - return pInfo; - if (uHash < pInfo->uHash) - iEnd = iMid - 1; - else - iStart = iMid + 1; - } while (iStart <= iEnd); - return nullptr; -} diff --git a/xfa/fxfa/parser/xfa_utils.h b/xfa/fxfa/parser/xfa_utils.h index 5cd265e2b3..15b6983f9a 100644 --- a/xfa/fxfa/parser/xfa_utils.h +++ b/xfa/fxfa/parser/xfa_utils.h @@ -42,7 +42,4 @@ const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName( XFA_Element eElement, const WideStringView& wsAttributeName); -const XFA_PACKETINFO* XFA_GetPacketByIndex(XFA_PacketType ePacket); -const XFA_PACKETINFO* XFA_GetPacketByName(const WideStringView& wsName); - #endif // XFA_FXFA_PARSER_XFA_UTILS_H_ |