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("&")); | ||||