Make XFA_MAPMODULEDATA::m_ValueMap map onto int, not void*.
Similar to the previous CL, the values are never actual pointers,
just enums/bools/ints cast into pointers. These all fit just fine
in an int32_t.
-- use pdfium::nullopt in a few places.
Change-Id: I796cf6bcd37a6f2f2fe90366390a38828a66eed4
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/74650
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index d068cf4..2262078 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -122,8 +122,8 @@
XFA_MAPMODULEDATA() {}
~XFA_MAPMODULEDATA() {}
- // Keyed by result of GetMapKey_*().
- std::map<uint32_t, void*> m_ValueMap;
+ // These two are keyed by result of GetMapKey_*().
+ std::map<uint32_t, int32_t> m_ValueMap; // int/enum/bool represented as int.
std::map<uint32_t, XFA_MAPDATABLOCK*> m_BufferMap;
};
@@ -340,16 +340,16 @@
Optional<bool> CJX_Object::TryBoolean(XFA_Attribute eAttr, bool bUseDefault) {
uint32_t key = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr);
- Optional<void*> value = GetMapModuleValue(key);
+ Optional<int32_t> value = GetMapModuleValue(key);
if (value.has_value())
return !!value.value();
if (!bUseDefault)
- return {};
+ return pdfium::nullopt;
return GetXFANode()->GetDefaultBoolean(eAttr);
}
void CJX_Object::SetBoolean(XFA_Attribute eAttr, bool bValue, bool bNotify) {
- CFX_XMLElement* elem = SetValue(eAttr, (void*)(uintptr_t)bValue, bNotify);
+ CFX_XMLElement* elem = SetValue(eAttr, static_cast<int32_t>(bValue), bNotify);
if (elem) {
elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
bValue ? L"1" : L"0");
@@ -361,7 +361,7 @@
}
void CJX_Object::SetInteger(XFA_Attribute eAttr, int32_t iValue, bool bNotify) {
- CFX_XMLElement* elem = SetValue(eAttr, (void*)(uintptr_t)iValue, bNotify);
+ CFX_XMLElement* elem = SetValue(eAttr, iValue, bNotify);
if (elem) {
elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
WideString::Format(L"%d", iValue));
@@ -375,31 +375,29 @@
Optional<int32_t> CJX_Object::TryInteger(XFA_Attribute eAttr,
bool bUseDefault) const {
uint32_t key = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr);
- Optional<void*> value = GetMapModuleValue(key);
+ Optional<int32_t> value = GetMapModuleValue(key);
if (value.has_value())
- return static_cast<int32_t>(reinterpret_cast<uintptr_t>(value.value()));
+ return value.value();
if (!bUseDefault)
- return {};
+ return pdfium::nullopt;
return GetXFANode()->GetDefaultInteger(eAttr);
}
Optional<XFA_AttributeValue> CJX_Object::TryEnum(XFA_Attribute eAttr,
bool bUseDefault) const {
uint32_t key = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr);
- Optional<void*> value = GetMapModuleValue(key);
- if (value.has_value()) {
- return static_cast<XFA_AttributeValue>(
- reinterpret_cast<uintptr_t>(value.value()));
- }
+ Optional<int32_t> value = GetMapModuleValue(key);
+ if (value.has_value())
+ return static_cast<XFA_AttributeValue>(value.value());
if (!bUseDefault)
- return {};
+ return pdfium::nullopt;
return GetXFANode()->GetDefaultEnum(eAttr);
}
void CJX_Object::SetEnum(XFA_Attribute eAttr,
XFA_AttributeValue eValue,
bool bNotify) {
- CFX_XMLElement* elem = SetValue(eAttr, (void*)(uintptr_t)eValue, bNotify);
+ CFX_XMLElement* elem = SetValue(eAttr, static_cast<int32_t>(eValue), bNotify);
if (elem) {
elem->SetAttribute(WideString::FromASCII(XFA_AttributeToName(eAttr)),
WideString::FromASCII(XFA_AttributeValueToName(eValue)));
@@ -546,11 +544,11 @@
}
CFX_XMLElement* CJX_Object::SetValue(XFA_Attribute eAttr,
- void* pValue,
+ int32_t value,
bool bNotify) {
uint32_t key = GetMapKey_Element(GetXFAObject()->GetElementType(), eAttr);
OnChanging(eAttr, bNotify);
- SetMapModuleValue(key, pValue);
+ SetMapModuleValue(key, value);
OnChanged(eAttr, bNotify, false);
CXFA_Node* pNode = GetXFANode();
@@ -844,11 +842,11 @@
return map_module_data_.get();
}
-void CJX_Object::SetMapModuleValue(uint32_t key, void* pValue) {
- CreateMapModuleData()->m_ValueMap[key] = pValue;
+void CJX_Object::SetMapModuleValue(uint32_t key, int32_t value) {
+ CreateMapModuleData()->m_ValueMap[key] = value;
}
-Optional<void*> CJX_Object::GetMapModuleValue(uint32_t key) const {
+Optional<int32_t> CJX_Object::GetMapModuleValue(uint32_t key) const {
std::set<const CXFA_Node*> visited;
for (const CXFA_Node* pNode = GetXFANode(); pNode;
pNode = pNode->GetTemplateNodeIfExists()) {
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 7609eec..e574262 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -254,14 +254,14 @@
// Returns a pointer to the XML node that needs to be updated with the new
// attribute value. |nullptr| if no update is needed.
- CFX_XMLElement* SetValue(XFA_Attribute eAttr, void* pValue, bool bNotify);
+ CFX_XMLElement* SetValue(XFA_Attribute eAttr, int32_t value, bool bNotify);
int32_t Subform_and_SubformSet_InstanceIndex();
XFA_MAPMODULEDATA* CreateMapModuleData();
XFA_MAPMODULEDATA* GetMapModuleData() const;
- void SetMapModuleValue(uint32_t key, void* pValue);
+ void SetMapModuleValue(uint32_t key, int32_t value);
void SetMapModuleString(uint32_t key, WideStringView wsValue);
- Optional<void*> GetMapModuleValue(uint32_t key) const;
+ Optional<int32_t> GetMapModuleValue(uint32_t key) const;
Optional<WideString> GetMapModuleString(uint32_t key) const;
void SetMapModuleBuffer(uint32_t key,
void* pValue,