| Index: xfa/fxfa/parser/cxfa_node.cpp
|
| diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
|
| index 8f352d35accd6be6095ce531023361a2e80c049b..44b7e2fb1ccc686bc1290d8c19cc2a45574ecc74 100644
|
| --- a/xfa/fxfa/parser/cxfa_node.cpp
|
| +++ b/xfa/fxfa/parser/cxfa_node.cpp
|
| @@ -17,6 +17,7 @@
|
| #include "xfa/fgas/crt/fgas_system.h"
|
| #include "xfa/fxfa/app/xfa_ffnotify.h"
|
| #include "xfa/fxfa/include/cxfa_eventparam.h"
|
| +#include "xfa/fxfa/parser/cxfa_measurement.h"
|
| #include "xfa/fxfa/parser/cxfa_occur.h"
|
| #include "xfa/fxfa/parser/cxfa_scriptcontext.h"
|
| #include "xfa/fxfa/parser/cxfa_simple_parser.h"
|
| @@ -445,6 +446,28 @@ void* GetMapKey_Element(XFA_Element eType, XFA_ATTRIBUTE eAttribute) {
|
| (eAttribute << 8) | XFA_KEYTYPE_Element);
|
| }
|
|
|
| +const XFA_ATTRIBUTEINFO* GetAttributeOfElement(XFA_Element eElement,
|
| + XFA_ATTRIBUTE eAttribute,
|
| + uint32_t dwPacket) {
|
| + int32_t iCount = 0;
|
| + const uint8_t* pAttr = XFA_GetElementAttributes(eElement, iCount);
|
| + if (!pAttr || iCount < 1)
|
| + return nullptr;
|
| +
|
| + if (!std::binary_search(pAttr, pAttr + iCount, eAttribute))
|
| + return nullptr;
|
| +
|
| + const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute);
|
| + ASSERT(pInfo);
|
| + if (dwPacket == XFA_XDPPACKET_UNKNOWN)
|
| + return pInfo;
|
| + return (dwPacket & pInfo->dwPackets) ? pInfo : nullptr;
|
| +}
|
| +
|
| +const XFA_ATTRIBUTEENUMINFO* GetAttributeEnumByID(XFA_ATTRIBUTEENUM eName) {
|
| + return g_XFAEnumData + eName;
|
| +}
|
| +
|
| } // namespace
|
|
|
| static void XFA_DefaultFreeData(void* pData) {}
|
| @@ -2335,7 +2358,7 @@ void CXFA_Node::Script_Som_Mandatory(CFXJSE_Value* pValue,
|
| } else {
|
| int32_t iValue = validate.GetNullTest();
|
| const XFA_ATTRIBUTEENUMINFO* pInfo =
|
| - XFA_GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue);
|
| + GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue);
|
| CFX_WideString wsValue;
|
| if (pInfo)
|
| wsValue = pInfo->pName;
|
| @@ -2920,8 +2943,8 @@ void CXFA_Node::Script_Template_CreateNode(CFXJSE_Arguments* pArguments) {
|
| pArguments->GetReturnValue()->SetNull();
|
| } else {
|
| if (!strName.IsEmpty()) {
|
| - if (XFA_GetAttributeOfElement(eType, XFA_ATTRIBUTE_Name,
|
| - XFA_XDPPACKET_UNKNOWN)) {
|
| + if (GetAttributeOfElement(eType, XFA_ATTRIBUTE_Name,
|
| + XFA_XDPPACKET_UNKNOWN)) {
|
| pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, strName.AsStringC(), true);
|
| if (pNewNode->GetPacketID() == XFA_XDPPACKET_Datasets) {
|
| pNewNode->CreateXMLMappingNode();
|
| @@ -3709,7 +3732,7 @@ FX_BOOL CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr,
|
| if (!TryEnum(pAttr->eName, eValue, bUseDefault)) {
|
| return FALSE;
|
| }
|
| - wsValue = XFA_GetAttributeEnumByID(eValue)->pName;
|
| + wsValue = GetAttributeEnumByID(eValue)->pName;
|
| return TRUE;
|
| } break;
|
| case XFA_ATTRIBUTETYPE_Cdata: {
|
| @@ -4058,7 +4081,7 @@ FX_BOOL CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr,
|
| static_cast<CFDE_XMLElement*>(m_pXMLNode)
|
| ->SetString(
|
| pInfo->pName,
|
| - XFA_GetAttributeEnumByID((XFA_ATTRIBUTEENUM)(uintptr_t)pValue)
|
| + GetAttributeEnumByID((XFA_ATTRIBUTEENUM)(uintptr_t)pValue)
|
| ->pName);
|
| break;
|
| case XFA_ATTRIBUTETYPE_Boolean:
|
| @@ -4891,7 +4914,7 @@ void CXFA_Node::UpdateNameHash() {
|
| wsName = GetCData(XFA_ATTRIBUTE_Name);
|
| m_dwNameHash = FX_HashCode_GetW(wsName, false);
|
| } else if (pNotsure->eType == XFA_ATTRIBUTETYPE_Enum) {
|
| - wsName = XFA_GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName;
|
| + wsName = GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName;
|
| m_dwNameHash = FX_HashCode_GetW(wsName, false);
|
| }
|
| }
|
|
|