diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-01 09:54:48 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-01 09:54:48 +0200 |
commit | 273a643145bb1255507d3a721f8e0a82d07516ab (patch) | |
tree | 2325609fa42dc3d7888183e89385613d34c4fd9e /core/variant | |
parent | 85062e37efbba65b7bb7d191a53e5207df942b86 (diff) | |
parent | ec29c3e784abdf891abd38f42444216e3d2a0fb7 (diff) | |
download | redot-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.cpp | 14 |
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; } |