Browse Source

fix start position for invalid xml entities (closes #4139)

Simon Krajewski 10 years ago
parent
commit
9a2cb4b13a
2 changed files with 15 additions and 1 deletions
  1. 1 1
      std/haxe/xml/Parser.hx
  2. 14 0
      tests/unit/src/unit/TestXML.hx

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

@@ -358,7 +358,7 @@ class Parser
 						buf.addChar("&".code);
 						buf.addChar("&".code);
 						buf.addSub(str, start, p - start);
 						buf.addSub(str, start, p - start);
 						p--;
 						p--;
-						start = p;
+						start = p + 1;
 						state = escapeNext;
 						state = escapeNext;
 					}
 					}
 			}
 			}

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

@@ -216,4 +216,18 @@ class TestXML extends Test {
 		var c = a.firstChild();
 		var c = a.firstChild();
 		eq('event=Hit.Eject\r\n"onHit', c.get("e"));
 		eq('event=Hit.Eject\r\n"onHit', c.get("e"));
 	}
 	}
+
+	function testIssue4139() {
+		function doXml(data:String)
+		{
+			var xml = Xml.parse(data);
+			var first = xml.firstElement();
+			var thing = first.firstChild();
+			return "blah = " + thing.get("blah");
+		}
+		var fancyData = '<?xml version="1.0" encoding="utf-8" ?><data><thing blah="abc&def"/></data>';
+		eq("blah = abc&def", doXml(fancyData));
+		var plainData = '<data><thing blah="abc&def"/></data>';
+		eq("blah = abc&def", doXml(plainData));
+	}
 }
 }