summaryrefslogtreecommitdiffstats
path: root/core/variant
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-05-01 09:54:48 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-05-01 09:54:48 +0200
commit273a643145bb1255507d3a721f8e0a82d07516ab (patch)
tree2325609fa42dc3d7888183e89385613d34c4fd9e /core/variant
parent85062e37efbba65b7bb7d191a53e5207df942b86 (diff)
parentec29c3e784abdf891abd38f42444216e3d2a0fb7 (diff)
downloadredot-engine-273a643145bb1255507d3a721f8e0a82d07516ab.tar.gz
Merge pull request #89647 from AThousandShips/read_only_dict
[Core] Fix property access on read-only `Dictionary`
Diffstat (limited to 'core/variant')
-rw-r--r--core/variant/variant_setget.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp
index 9d5ed22b1a..f49e9e54b3 100644
--- a/core/variant/variant_setget.cpp
+++ b/core/variant/variant_setget.cpp
@@ -251,15 +251,21 @@ void Variant::set_named(const StringName &p_member, const Variant &p_value, bool
return;
}
} else if (type == Variant::DICTIONARY) {
- Variant *v = VariantGetInternalPtr<Dictionary>::get_ptr(this)->getptr(p_member);
+ Dictionary &dict = *VariantGetInternalPtr<Dictionary>::get_ptr(this);
+
+ if (dict.is_read_only()) {
+ r_valid = false;
+ return;
+ }
+
+ Variant *v = dict.getptr(p_member);
if (v) {
*v = p_value;
- r_valid = true;
} else {
- VariantGetInternalPtr<Dictionary>::get_ptr(this)->operator[](p_member) = p_value;
- r_valid = true;
+ dict[p_member] = p_value;
}
+ r_valid = true;
} else {
r_valid = false;
}