Browse Source

Merge pull request #52180 from timothyqiu/config-file-prop

Quote and escape ConfigFile keys when necessary
Hugo Locurcio 4 năm trước cách đây
mục cha
commit
4d08a737fb
2 tập tin đã thay đổi với 10 bổ sung3 xóa
  1. 1 1
      core/io/config_file.cpp
  2. 9 2
      tests/test_config_file.h

+ 1 - 1
core/io/config_file.cpp

@@ -188,7 +188,7 @@ Error ConfigFile::_internal_save(FileAccess *file) {
 		for (OrderedHashMap<String, Variant>::Element F = E.get().front(); F; F = F.next()) {
 			String vstr;
 			VariantWriter::write_to_string(F.get(), vstr);
-			file->store_string(F.key() + "=" + vstr + "\n");
+			file->store_string(F.key().property_name_encode() + "=" + vstr + "\n");
 		}
 	}
 

+ 9 - 2
tests/test_config_file.h

@@ -122,6 +122,8 @@ TEST_CASE("[ConfigFile] Saving file") {
 	config_file.set_value("player", "position", Vector2(3, 4));
 	config_file.set_value("graphics", "antialiasing", true);
 	config_file.set_value("graphics", "antiAliasing", false);
+	config_file.set_value("quoted", String::utf8("静音"), 42);
+	config_file.set_value("quoted", "a=b", 7);
 
 #ifdef WINDOWS_ENABLED
 	const String config_path = OS::get_singleton()->get_environment("TEMP").plus_file("config.ini");
@@ -132,7 +134,7 @@ TEST_CASE("[ConfigFile] Saving file") {
 	config_file.save(config_path);
 
 	// Expected contents of the saved ConfigFile.
-	const String contents = R"([player]
+	const String contents = String::utf8(R"([player]
 
 name="Unnamed Player"
 tagline="Waiting
@@ -145,7 +147,12 @@ position=Vector2(3, 4)
 
 antialiasing=true
 antiAliasing=false
-)";
+
+[quoted]
+
+"静音"=42
+"a=b"=7
+)");
 
 	FileAccessRef file = FileAccess::open(config_path, FileAccess::READ);
 	CHECK_MESSAGE(file->get_as_utf8_string() == contents,