ソースを参照

Fixed read-only dictionaries adding missing keys

When querying a non-existing key on a read-only
dictionary, the key was still added (albeit never set).

This fixes #74726.
Mario Liebisch 2 年 前
コミット
46e5311d5a
1 ファイル変更6 行追加1 行削除
  1. 6 1
      core/variant/dictionary.cpp

+ 6 - 1
core/variant/dictionary.cpp

@@ -83,7 +83,12 @@ Variant &Dictionary::operator[](const Variant &p_key) {
 	if (unlikely(_p->read_only)) {
 		if (p_key.get_type() == Variant::STRING_NAME) {
 			const StringName *sn = VariantInternal::get_string_name(&p_key);
-			*_p->read_only = _p->variant_map[sn->operator String()];
+			const String &key = sn->operator String();
+			if (_p->variant_map.has(key)) {
+				*_p->read_only = _p->variant_map[key];
+			} else {
+				*_p->read_only = Variant();
+			}
 		} else {
 			*_p->read_only = _p->variant_map[p_key];
 		}