summaryrefslogtreecommitdiff
path: root/fxjs/cjx_node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fxjs/cjx_node.cpp')
-rw-r--r--fxjs/cjx_node.cpp46
1 files changed, 26 insertions, 20 deletions
diff --git a/fxjs/cjx_node.cpp b/fxjs/cjx_node.cpp
index 7d919c1cff..c14e6f092c 100644
--- a/fxjs/cjx_node.cpp
+++ b/fxjs/cjx_node.cpp
@@ -180,7 +180,7 @@ CJX_Node::CJX_Node(CXFA_Node* node)
: CJX_Object(node), map_module_data_(nullptr) {}
CJX_Node::~CJX_Node() {
- RemoveMapModuleKey();
+ ClearMapModuleBuffer();
}
CXFA_Node* CJX_Node::GetXFANode() {
@@ -320,10 +320,10 @@ bool CJX_Node::GetAttribute(const WideStringView& wsAttr,
return true;
}
-bool CJX_Node::RemoveAttribute(const WideStringView& wsAttr) {
+void CJX_Node::RemoveAttribute(const WideStringView& wsAttr) {
void* pKey = GetMapKey_Custom(wsAttr);
- RemoveMapModuleKey(pKey);
- return true;
+ if (pKey)
+ RemoveMapModuleKey(pKey);
}
int32_t CJX_Node::Subform_and_SubformSet_InstanceIndex() {
@@ -3765,26 +3765,11 @@ bool CJX_Node::HasMapModuleKey(void* pKey) {
pdfium::ContainsKey(pModule->m_BufferMap, pKey));
}
-void CJX_Node::RemoveMapModuleKey(void* pKey) {
+void CJX_Node::ClearMapModuleBuffer() {
XFA_MAPMODULEDATA* pModule = GetMapModuleData();
if (!pModule)
return;
- if (pKey) {
- auto it = pModule->m_BufferMap.find(pKey);
- if (it != pModule->m_BufferMap.end()) {
- XFA_MAPDATABLOCK* pBuffer = it->second;
- if (pBuffer) {
- if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree)
- pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
- FX_Free(pBuffer);
- }
- pModule->m_BufferMap.erase(it);
- }
- pModule->m_ValueMap.erase(pKey);
- return;
- }
-
for (auto& pair : pModule->m_BufferMap) {
XFA_MAPDATABLOCK* pBuffer = pair.second;
if (pBuffer) {
@@ -3798,6 +3783,27 @@ void CJX_Node::RemoveMapModuleKey(void* pKey) {
delete pModule;
}
+void CJX_Node::RemoveMapModuleKey(void* pKey) {
+ ASSERT(pKey);
+
+ XFA_MAPMODULEDATA* pModule = GetMapModuleData();
+ if (!pModule)
+ return;
+
+ auto it = pModule->m_BufferMap.find(pKey);
+ if (it != pModule->m_BufferMap.end()) {
+ XFA_MAPDATABLOCK* pBuffer = it->second;
+ if (pBuffer) {
+ if (pBuffer->pCallbackInfo && pBuffer->pCallbackInfo->pFree)
+ pBuffer->pCallbackInfo->pFree(*(void**)pBuffer->GetData());
+ FX_Free(pBuffer);
+ }
+ pModule->m_BufferMap.erase(it);
+ }
+ pModule->m_ValueMap.erase(pKey);
+ return;
+}
+
void CJX_Node::MergeAllData(void* pDstModule) {
XFA_MAPMODULEDATA* pDstModuleData =
static_cast<CXFA_Node*>(pDstModule)->JSNode()->CreateMapModuleData();