Răsfoiți Sursa

Fix Variant tags parsing.

(cherry picked from commit eca4d2fcccddd31ef4183d4236d2f6fa002dfb07)
bruvzg 4 ani în urmă
părinte
comite
c7a0113a4b
1 a modificat fișierele cu 24 adăugiri și 8 ștergeri
  1. 24 8
      core/variant_parser.cpp

+ 24 - 8
core/variant_parser.cpp

@@ -1297,16 +1297,32 @@ Error VariantParser::_parse_tag(Token &token, Stream *p_stream, int &line, Strin
 		r_tag.name = "";
 		r_tag.fields.clear();
 
-		while (true) {
-			CharType c = p_stream->get_char();
-			if (p_stream->is_eof()) {
-				r_err_str = "Unexpected EOF while parsing simple tag";
-				return ERR_PARSE_ERROR;
+		if (p_stream->is_utf8()) {
+			CharString cs;
+			while (true) {
+				CharType c = p_stream->get_char();
+				if (p_stream->is_eof()) {
+					r_err_str = "Unexpected EOF while parsing simple tag";
+					return ERR_PARSE_ERROR;
+				}
+				if (c == ']') {
+					break;
+				}
+				cs += c;
 			}
-			if (c == ']') {
-				break;
+			r_tag.name.parse_utf8(cs.get_data(), cs.length());
+		} else {
+			while (true) {
+				CharType c = p_stream->get_char();
+				if (p_stream->is_eof()) {
+					r_err_str = "Unexpected EOF while parsing simple tag";
+					return ERR_PARSE_ERROR;
+				}
+				if (c == ']') {
+					break;
+				}
+				r_tag.name += String::chr(c);
 			}
-			r_tag.name += String::chr(c);
 		}
 
 		r_tag.name = r_tag.name.strip_edges();