Browse Source

fixed xml cased escape sequences (#11914)

* fixed xml cased escape sequences

* [tests] XML: test non-lowercase entities

* [php] fix xml cased escape sequences

---------

Co-authored-by: Rudy Ges <[email protected]>
Nicolas Cannasse 7 tháng trước cách đây
mục cha
commit
527d83addb

+ 1 - 1
std/haxe/xml/Parser.hx

@@ -341,7 +341,7 @@ class Parser {
 					}
 				case S.ESCAPE:
 					if (c == ';'.code) {
-						var s = str.substr(start, p - start);
+						var s = str.substr(start, p - start).toLowerCase();
 						if (s.fastCodeAt(0) == '#'.code) {
 							var c = s.fastCodeAt(1) == 'x'.code ? Std.parseInt("0" + s.substr(1, s.length - 1)) : Std.parseInt(s.substr(1, s.length - 1));
 							#if !(target.unicode)

+ 1 - 1
std/php/_std/haxe/xml/Parser.hx

@@ -325,7 +325,7 @@ class Parser {
 					}
 				case S.ESCAPE:
 					if (c == ';'.code) {
-						var s = str.substr(start, p - start);
+						var s = (str.substr(start, p - start) :String).toLowerCase();
 						if (s.fastCodeAt(0) == '#'.code) {
 							var c = s.fastCodeAt(1) == 'x'.code ? Std.parseInt("0" + s.substr(1,
 								Global.strlen(s) - 1)) : Std.parseInt(s.substr(1, Global.strlen(s) - 1));

+ 5 - 0
tests/unit/src/unit/TestXML.hx

@@ -170,6 +170,11 @@ class TestXML extends Test {
 		var s = "<a>&gt;<b>&lt;</b>&lt;&gt;<b>&gt;&lt;</b>\"</a>";
 		var xml = haxe.xml.Parser.parse(s);
 		eq(s, xml.toString());
+
+		// Entities are case insensitive
+		var s1 = "<a>&GT;<b>&LT;</b>&Lt;&gT;<b>&GT;&LT;</b>\"</a>";
+		var xml = haxe.xml.Parser.parse(s1);
+		eq(s, xml.toString());
 	}
 
 	function testMore() {