git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@954802 13f79535-47bb-0310-9956-ffa450edef68master
@@ -16,6 +16,14 @@ Changes that could break older environments: | |||||
* Removed ant-nodeps.jar; it is now merged into ant.jar. | * Removed ant-nodeps.jar; it is now merged into ant.jar. | ||||
* DOMElementWriter#encode used to employ special code before encoding | |||||
ampersands so that { remained { rather than being turned | |||||
into {. This is no longer the case, ampersands will now | |||||
be encoded unconditionally. | |||||
This affects <echoxml> task as well as the XML logger or JUnit | |||||
formatter where ampersands will now always get encoded. | |||||
Bugzilla Report 49404. | |||||
Fixed bugs: | Fixed bugs: | ||||
----------- | ----------- | ||||
@@ -429,13 +429,7 @@ public class DOMElementWriter { | |||||
sb.append("""); | sb.append("""); | ||||
break; | break; | ||||
case '&': | case '&': | ||||
int nextSemi = value.indexOf(";", i); | |||||
if (nextSemi < 0 | |||||
|| !isReference(value.substring(i, nextSemi + 1))) { | |||||
sb.append("&"); | |||||
} else { | |||||
sb.append('&'); | |||||
} | |||||
sb.append("&"); | |||||
break; | break; | ||||
default: | default: | ||||
if (isLegalCharacter(c)) { | if (isLegalCharacter(c)) { | ||||
@@ -79,14 +79,12 @@ public class A extends TestCase { | |||||
</junit> | </junit> | ||||
<xmlvalidate file="${output}/TEST-org.example.A.xml" | <xmlvalidate file="${output}/TEST-org.example.A.xml" | ||||
lenient="true"/> | lenient="true"/> | ||||
<!-- | |||||
<au:assertResourceContains | <au:assertResourceContains | ||||
resource="${output}/TEST-org.example.A.xml" | resource="${output}/TEST-org.example.A.xml" | ||||
value="message="&amp;amp;&amp;"/> | value="message="&amp;amp;&amp;"/> | ||||
<au:assertResourceContains | <au:assertResourceContains | ||||
resource="${output}/TEST-org.example.A.xml" | resource="${output}/TEST-org.example.A.xml" | ||||
value="message=AssertionFailedError: &amp;&"/> | |||||
--> | |||||
value="AssertionFailedError: &amp;amp;&"/> | |||||
</target> | </target> | ||||
</project> | </project> |
@@ -53,17 +53,17 @@ public class DOMElementWriterTest extends TestCase { | |||||
} | } | ||||
public void testEncode() { | public void testEncode() { | ||||
assertEquals("", w.encode("")); | |||||
assertEquals(" ", w.encode(" ")); | |||||
assertEquals(" ", w.encode(" ")); | |||||
assertEquals("&#20;", w.encode("")); | |||||
assertEquals("&#x20;", w.encode(" ")); | |||||
assertEquals("&#xA0;", w.encode(" ")); | |||||
assertEquals("&#A0;", w.encode("&#A0;")); | assertEquals("&#A0;", w.encode("&#A0;")); | ||||
assertEquals("20;", w.encode("20;")); | assertEquals("20;", w.encode("20;")); | ||||
assertEquals("&#20", w.encode("")); | assertEquals("&#20", w.encode("")); | ||||
assertEquals(""", w.encode(""")); | |||||
assertEquals("'", w.encode("'")); | |||||
assertEquals(">", w.encode(">")); | |||||
assertEquals("<", w.encode("<")); | |||||
assertEquals("&", w.encode("&")); | |||||
assertEquals("&quot;", w.encode(""")); | |||||
assertEquals("&apos;", w.encode("'")); | |||||
assertEquals("&gt;", w.encode(">")); | |||||
assertEquals("&lt;", w.encode("<")); | |||||
assertEquals("&amp;", w.encode("&")); | |||||
assertEquals(""", w.encode("\"")); | assertEquals(""", w.encode("\"")); | ||||
assertEquals("<", w.encode("<")); | assertEquals("<", w.encode("<")); | ||||
assertEquals("&", w.encode("&")); | assertEquals("&", w.encode("&")); | ||||