| 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_object.h" | 7 #include "xfa/fxfa/parser/xfa_object.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 #include "xfa/fde/xml/fde_xml_imp.h" | 10 #include "xfa/fde/xml/fde_xml_imp.h" |
| (...skipping 1751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 {0xd576d08e, L"mouseUp", XFA_EVENT_MouseUp, 5}, | 1762 {0xd576d08e, L"mouseUp", XFA_EVENT_MouseUp, 5}, |
| 1763 {0xd95657a6, L"click", XFA_EVENT_Click, 4}, | 1763 {0xd95657a6, L"click", XFA_EVENT_Click, 4}, |
| 1764 {0xdbfbe02e, L"calculate", XFA_EVENT_Calculate, 1}, | 1764 {0xdbfbe02e, L"calculate", XFA_EVENT_Calculate, 1}, |
| 1765 {0xe25fa7b8, L"postOpen", XFA_EVENT_PostOpen, 7}, | 1765 {0xe25fa7b8, L"postOpen", XFA_EVENT_PostOpen, 7}, |
| 1766 {0xe28dce7e, L"enter", XFA_EVENT_Enter, 2}, | 1766 {0xe28dce7e, L"enter", XFA_EVENT_Enter, 2}, |
| 1767 {0xfc82d695, L"postSave", XFA_EVENT_PostSave, 0}, | 1767 {0xfc82d695, L"postSave", XFA_EVENT_PostSave, 0}, |
| 1768 {0xfd54fbb7, L"postSign", XFA_EVENT_PostSign, 6}, | 1768 {0xfd54fbb7, L"postSign", XFA_EVENT_PostSign, 6}, |
| 1769 }; | 1769 }; |
| 1770 const XFA_ExecEventParaInfo* GetEventParaInfoByName( | 1770 const XFA_ExecEventParaInfo* GetEventParaInfoByName( |
| 1771 const CFX_WideStringC& wsEventName) { | 1771 const CFX_WideStringC& wsEventName) { |
| 1772 int32_t iLength = wsEventName.GetLength(); | 1772 uint32_t uHash = FX_HashCode_GetW(wsEventName, false); |
| 1773 uint32_t uHash = FX_HashCode_String_GetW(wsEventName.c_str(), iLength); | 1773 int32_t iStart = 0; |
| 1774 const XFA_ExecEventParaInfo* eventParaInfo = NULL; | 1774 int32_t iEnd = (sizeof(gs_eventParaInfos) / sizeof(gs_eventParaInfos[0])) - 1; |
| 1775 int32_t iStart = 0, | |
| 1776 iEnd = (sizeof(gs_eventParaInfos) / sizeof(gs_eventParaInfos[0])) - 1; | |
| 1777 int32_t iMid = (iStart + iEnd) / 2; | |
| 1778 do { | 1775 do { |
| 1779 iMid = (iStart + iEnd) / 2; | 1776 int32_t iMid = (iStart + iEnd) / 2; |
| 1780 eventParaInfo = &gs_eventParaInfos[iMid]; | 1777 const XFA_ExecEventParaInfo* eventParaInfo = &gs_eventParaInfos[iMid]; |
| 1781 if (uHash == eventParaInfo->m_uHash) { | 1778 if (uHash == eventParaInfo->m_uHash) { |
| 1782 return eventParaInfo; | 1779 return eventParaInfo; |
| 1783 } else if (uHash < eventParaInfo->m_uHash) { | 1780 } |
| 1781 if (uHash < eventParaInfo->m_uHash) { |
| 1784 iEnd = iMid - 1; | 1782 iEnd = iMid - 1; |
| 1785 } else { | 1783 } else { |
| 1786 iStart = iMid + 1; | 1784 iStart = iMid + 1; |
| 1787 } | 1785 } |
| 1788 } while (iStart <= iEnd); | 1786 } while (iStart <= iEnd); |
| 1789 return NULL; | 1787 return nullptr; |
| 1790 } | 1788 } |
| 1791 void XFA_STRING_TO_RGB(CFX_WideString& strRGB, | 1789 void XFA_STRING_TO_RGB(CFX_WideString& strRGB, |
| 1792 int32_t& r, | 1790 int32_t& r, |
| 1793 int32_t& g, | 1791 int32_t& g, |
| 1794 int32_t& b) { | 1792 int32_t& b) { |
| 1795 r = 0; | 1793 r = 0; |
| 1796 g = 0; | 1794 g = 0; |
| 1797 b = 0; | 1795 b = 0; |
| 1798 FX_WCHAR zero = '0'; | 1796 FX_WCHAR zero = '0'; |
| 1799 int32_t iIndex = 0; | 1797 int32_t iIndex = 0; |
| (...skipping 1480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3280 int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); | 3278 int32_t iCount = XFA_ScriptInstanceManager_GetCount(this); |
| 3281 if (iDesired == iCount) { | 3279 if (iDesired == iCount) { |
| 3282 return 0; | 3280 return 0; |
| 3283 } | 3281 } |
| 3284 if (iDesired < iCount) { | 3282 if (iDesired < iCount) { |
| 3285 CFX_WideStringC wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name); | 3283 CFX_WideStringC wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name); |
| 3286 CFX_WideString wsInstanceName = wsInstManagerName.IsEmpty() | 3284 CFX_WideString wsInstanceName = wsInstManagerName.IsEmpty() |
| 3287 ? wsInstManagerName | 3285 ? wsInstManagerName |
| 3288 : wsInstManagerName.Mid(1); | 3286 : wsInstManagerName.Mid(1); |
| 3289 uint32_t dInstanceNameHash = | 3287 uint32_t dInstanceNameHash = |
| 3290 wsInstanceName.IsEmpty() ? 0 : FX_HashCode_String_GetW( | 3288 FX_HashCode_GetW(wsInstanceName.AsStringC(), false); |
| 3291 wsInstanceName.c_str(), | |
| 3292 wsInstanceName.GetLength()); | |
| 3293 CXFA_Node* pPrevSibling = | 3289 CXFA_Node* pPrevSibling = |
| 3294 (iDesired == 0) ? this | 3290 (iDesired == 0) ? this |
| 3295 : XFA_ScriptInstanceManager_GetItem(this, iDesired - 1); | 3291 : XFA_ScriptInstanceManager_GetItem(this, iDesired - 1); |
| 3296 while (iCount > iDesired) { | 3292 while (iCount > iDesired) { |
| 3297 CXFA_Node* pRemoveInstance = | 3293 CXFA_Node* pRemoveInstance = |
| 3298 pPrevSibling->GetNodeItem(XFA_NODEITEM_NextSibling); | 3294 pPrevSibling->GetNodeItem(XFA_NODEITEM_NextSibling); |
| 3299 if (pRemoveInstance->GetClassID() != XFA_ELEMENT_Subform && | 3295 if (pRemoveInstance->GetClassID() != XFA_ELEMENT_Subform && |
| 3300 pRemoveInstance->GetClassID() != XFA_ELEMENT_SubformSet) { | 3296 pRemoveInstance->GetClassID() != XFA_ELEMENT_SubformSet) { |
| 3301 continue; | 3297 continue; |
| 3302 } | 3298 } |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3719 FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(FX_WSTRC(L"0")).AsStringC()); | 3715 FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(FX_WSTRC(L"0")).AsStringC()); |
| 3720 } | 3716 } |
| 3721 void CXFA_Node::Script_Encrypt_Format(FXJSE_HVALUE hValue, | 3717 void CXFA_Node::Script_Encrypt_Format(FXJSE_HVALUE hValue, |
| 3722 FX_BOOL bSetting, | 3718 FX_BOOL bSetting, |
| 3723 XFA_ATTRIBUTE eAttribute) {} | 3719 XFA_ATTRIBUTE eAttribute) {} |
| 3724 enum XFA_KEYTYPE { | 3720 enum XFA_KEYTYPE { |
| 3725 XFA_KEYTYPE_Custom, | 3721 XFA_KEYTYPE_Custom, |
| 3726 XFA_KEYTYPE_Element, | 3722 XFA_KEYTYPE_Element, |
| 3727 }; | 3723 }; |
| 3728 void* XFA_GetMapKey_Custom(const CFX_WideStringC& wsKey) { | 3724 void* XFA_GetMapKey_Custom(const CFX_WideStringC& wsKey) { |
| 3729 uint32_t dwKey = FX_HashCode_String_GetW(wsKey.c_str(), wsKey.GetLength()); | 3725 uint32_t dwKey = FX_HashCode_GetW(wsKey, false); |
| 3730 return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom); | 3726 return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom); |
| 3731 } | 3727 } |
| 3732 void* XFA_GetMapKey_Element(XFA_ELEMENT eElement, XFA_ATTRIBUTE eAttribute) { | 3728 void* XFA_GetMapKey_Element(XFA_ELEMENT eElement, XFA_ATTRIBUTE eAttribute) { |
| 3733 return (void*)(uintptr_t)((eElement << 16) | (eAttribute << 8) | | 3729 return (void*)(uintptr_t)((eElement << 16) | (eAttribute << 8) | |
| 3734 XFA_KEYTYPE_Element); | 3730 XFA_KEYTYPE_Element); |
| 3735 } | 3731 } |
| 3736 FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) { | 3732 FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) { |
| 3737 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); | 3733 void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); |
| 3738 return HasMapModuleKey(pKey, bCanInherit); | 3734 return HasMapModuleKey(pKey, bCanInherit); |
| 3739 } | 3735 } |
| (...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4725 pNode->m_pXMLNode = pNewXMLElement; | 4721 pNode->m_pXMLNode = pNewXMLElement; |
| 4726 pNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown); | 4722 pNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown); |
| 4727 } else { | 4723 } else { |
| 4728 m_pXMLNode->RemoveChildNode(pNode->m_pXMLNode); | 4724 m_pXMLNode->RemoveChildNode(pNode->m_pXMLNode); |
| 4729 } | 4725 } |
| 4730 pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); | 4726 pNode->SetFlag(XFA_NODEFLAG_OwnXMLNode, false); |
| 4731 } | 4727 } |
| 4732 return TRUE; | 4728 return TRUE; |
| 4733 } | 4729 } |
| 4734 CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const { | 4730 CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const { |
| 4735 return GetFirstChildByName( | 4731 return GetFirstChildByName(FX_HashCode_GetW(wsName, false)); |
| 4736 wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.c_str(), | |
| 4737 wsName.GetLength())); | |
| 4738 } | 4732 } |
| 4739 CXFA_Node* CXFA_Node::GetFirstChildByName(uint32_t dwNameHash) const { | 4733 CXFA_Node* CXFA_Node::GetFirstChildByName(uint32_t dwNameHash) const { |
| 4740 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; | 4734 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_FirstChild); pNode; |
| 4741 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 4735 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 4742 if (pNode->GetNameHash() == dwNameHash) { | 4736 if (pNode->GetNameHash() == dwNameHash) { |
| 4743 return pNode; | 4737 return pNode; |
| 4744 } | 4738 } |
| 4745 } | 4739 } |
| 4746 return NULL; | 4740 return NULL; |
| 4747 } | 4741 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4758 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; | 4752 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; |
| 4759 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 4753 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 4760 if (pNode->GetNameHash() == dwNameHash) { | 4754 if (pNode->GetNameHash() == dwNameHash) { |
| 4761 return pNode; | 4755 return pNode; |
| 4762 } | 4756 } |
| 4763 } | 4757 } |
| 4764 return NULL; | 4758 return NULL; |
| 4765 } | 4759 } |
| 4766 CXFA_Node* CXFA_Node::GetNextSameNameSibling( | 4760 CXFA_Node* CXFA_Node::GetNextSameNameSibling( |
| 4767 const CFX_WideStringC& wsNodeName) const { | 4761 const CFX_WideStringC& wsNodeName) const { |
| 4768 return GetNextSameNameSibling( | 4762 return GetNextSameNameSibling(FX_HashCode_GetW(wsNodeName, false)); |
| 4769 wsNodeName.IsEmpty() ? 0 | |
| 4770 : FX_HashCode_String_GetW(wsNodeName.c_str(), | |
| 4771 wsNodeName.GetLength())); | |
| 4772 } | 4763 } |
| 4773 CXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_ELEMENT eElement) const { | 4764 CXFA_Node* CXFA_Node::GetNextSameClassSibling(XFA_ELEMENT eElement) const { |
| 4774 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; | 4765 for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_NextSibling); pNode; |
| 4775 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 4766 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 4776 if (pNode->GetClassID() == eElement) { | 4767 if (pNode->GetClassID() == eElement) { |
| 4777 return pNode; | 4768 return pNode; |
| 4778 } | 4769 } |
| 4779 } | 4770 } |
| 4780 return NULL; | 4771 return NULL; |
| 4781 } | 4772 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4944 FALSE, FALSE); | 4935 FALSE, FALSE); |
| 4945 } | 4936 } |
| 4946 } | 4937 } |
| 4947 } | 4938 } |
| 4948 } | 4939 } |
| 4949 return iRet; | 4940 return iRet; |
| 4950 } | 4941 } |
| 4951 void CXFA_Node::UpdateNameHash() { | 4942 void CXFA_Node::UpdateNameHash() { |
| 4952 const XFA_NOTSUREATTRIBUTE* pNotsure = | 4943 const XFA_NOTSUREATTRIBUTE* pNotsure = |
| 4953 XFA_GetNotsureAttribute(GetClassID(), XFA_ATTRIBUTE_Name); | 4944 XFA_GetNotsureAttribute(GetClassID(), XFA_ATTRIBUTE_Name); |
| 4945 CFX_WideStringC wsName; |
| 4954 if (!pNotsure || pNotsure->eType == XFA_ATTRIBUTETYPE_Cdata) { | 4946 if (!pNotsure || pNotsure->eType == XFA_ATTRIBUTETYPE_Cdata) { |
| 4955 CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name); | 4947 wsName = GetCData(XFA_ATTRIBUTE_Name); |
| 4956 m_dwNameHash = | 4948 m_dwNameHash = FX_HashCode_GetW(wsName, false); |
| 4957 wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.c_str(), | |
| 4958 wsName.GetLength()); | |
| 4959 } else if (pNotsure->eType == XFA_ATTRIBUTETYPE_Enum) { | 4949 } else if (pNotsure->eType == XFA_ATTRIBUTETYPE_Enum) { |
| 4960 CFX_WideStringC wsName = | 4950 wsName = XFA_GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName; |
| 4961 XFA_GetAttributeEnumByID(GetEnum(XFA_ATTRIBUTE_Name))->pName; | 4951 m_dwNameHash = FX_HashCode_GetW(wsName, false); |
| 4962 m_dwNameHash = | |
| 4963 wsName.IsEmpty() ? 0 : FX_HashCode_String_GetW(wsName.c_str(), | |
| 4964 wsName.GetLength()); | |
| 4965 } | 4952 } |
| 4966 } | 4953 } |
| 4967 CFDE_XMLNode* CXFA_Node::CreateXMLMappingNode() { | 4954 CFDE_XMLNode* CXFA_Node::CreateXMLMappingNode() { |
| 4968 if (!m_pXMLNode) { | 4955 if (!m_pXMLNode) { |
| 4969 CFX_WideStringC wsTag = GetCData(XFA_ATTRIBUTE_Name); | 4956 CFX_WideStringC wsTag = GetCData(XFA_ATTRIBUTE_Name); |
| 4970 m_pXMLNode = new CFDE_XMLElement(wsTag); | 4957 m_pXMLNode = new CFDE_XMLElement(wsTag); |
| 4971 SetFlag(XFA_NODEFLAG_OwnXMLNode, false); | 4958 SetFlag(XFA_NODEFLAG_OwnXMLNode, false); |
| 4972 } | 4959 } |
| 4973 return m_pXMLNode; | 4960 return m_pXMLNode; |
| 4974 } | 4961 } |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5226 MoveBufferMapData(pSrcChild, pDstChild, pKey, TRUE); | 5213 MoveBufferMapData(pSrcChild, pDstChild, pKey, TRUE); |
| 5227 } | 5214 } |
| 5228 } | 5215 } |
| 5229 pSrcModule->MoveBufferMapData(pDstModule, pKey); | 5216 pSrcModule->MoveBufferMapData(pDstModule, pKey); |
| 5230 } | 5217 } |
| 5231 CXFA_NodeList::CXFA_NodeList(CXFA_Document* pDocument) | 5218 CXFA_NodeList::CXFA_NodeList(CXFA_Document* pDocument) |
| 5232 : CXFA_Object(pDocument, XFA_OBJECTTYPE_NodeList) { | 5219 : CXFA_Object(pDocument, XFA_OBJECTTYPE_NodeList) { |
| 5233 m_pDocument->GetScriptContext()->CacheList(this); | 5220 m_pDocument->GetScriptContext()->CacheList(this); |
| 5234 } | 5221 } |
| 5235 CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) { | 5222 CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) { |
| 5223 uint32_t dwHashCode = FX_HashCode_GetW(wsName, false); |
| 5236 int32_t iCount = GetLength(); | 5224 int32_t iCount = GetLength(); |
| 5237 uint32_t dwHashCode = | |
| 5238 FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength()); | |
| 5239 for (int32_t i = 0; i < iCount; i++) { | 5225 for (int32_t i = 0; i < iCount; i++) { |
| 5240 CXFA_Node* ret = Item(i); | 5226 CXFA_Node* ret = Item(i); |
| 5241 if (dwHashCode == ret->GetNameHash()) { | 5227 if (dwHashCode == ret->GetNameHash()) |
| 5242 return ret; | 5228 return ret; |
| 5243 } | |
| 5244 } | 5229 } |
| 5245 return NULL; | 5230 return NULL; |
| 5246 } | 5231 } |
| 5247 void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) { | 5232 void CXFA_NodeList::Script_ListClass_Append(CFXJSE_Arguments* pArguments) { |
| 5248 int32_t argc = pArguments->GetLength(); | 5233 int32_t argc = pArguments->GetLength(); |
| 5249 if (argc == 1) { | 5234 if (argc == 1) { |
| 5250 CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); | 5235 CXFA_Node* pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0)); |
| 5251 if (pNode) { | 5236 if (pNode) { |
| 5252 Append(pNode); | 5237 Append(pNode); |
| 5253 } else { | 5238 } else { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5395 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); | 5380 return m_pAttachNode->InsertChild(pNewNode, pBeforeNode); |
| 5396 } | 5381 } |
| 5397 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { | 5382 FX_BOOL CXFA_AttachNodeList::Remove(CXFA_Node* pNode) { |
| 5398 return m_pAttachNode->RemoveChild(pNode); | 5383 return m_pAttachNode->RemoveChild(pNode); |
| 5399 } | 5384 } |
| 5400 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { | 5385 CXFA_Node* CXFA_AttachNodeList::Item(int32_t iIndex) { |
| 5401 return m_pAttachNode->GetChild( | 5386 return m_pAttachNode->GetChild( |
| 5402 iIndex, XFA_ELEMENT_UNKNOWN, | 5387 iIndex, XFA_ELEMENT_UNKNOWN, |
| 5403 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); | 5388 m_pAttachNode->GetClassID() == XFA_ELEMENT_Subform); |
| 5404 } | 5389 } |
| OLD | NEW |