diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2018-03-02 12:53:24 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2018-03-02 13:33:53 +0100 |
commit | ab001d830b3822cbde4d987f7f49bb77e2edc2a0 (patch) | |
tree | 892f8a730bca16a8cebf1c5be627461e72a0e2dd | |
parent | 4ccc8e57f98024b913bafbf290b4093658674e68 (diff) |
Fix serialization of identifiers with non printable ASCII characters
Fixes #6888.
-rw-r--r-- | scene/resources/scene_format_text.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index bb5295709a..030b822f3b 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -1445,8 +1445,15 @@ void ResourceFormatSaverTextInstance::_find_resources(const Variant &p_variant, static String _valprop(const String &p_name) { - if (p_name.find("\"") != -1 || p_name.find("=") != -1 || p_name.find(" ") != -1) - return "\"" + p_name.c_escape_multiline() + "\""; + // Escape and quote strings with extended ASCII or further Unicode characters + // as well as '"', '=' or ' ' (32) + const CharType *cstr = p_name.c_str(); + for (int i = 0; cstr[i]; i++) { + if (cstr[i] == '=' || cstr[i] == '"' || cstr[i] < 33 || cstr[i] > 126) { + return "\"" + p_name.c_escape_multiline() + "\""; + } + } + // Keep as is return p_name; } |