diff --git a/WHATSNEW b/WHATSNEW index 6f361c093..63d177f26 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -16,6 +16,14 @@ Changes that could break older environments: * 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 &#123;. This is no longer the case, ampersands will now + be encoded unconditionally. + This affects task as well as the XML logger or JUnit + formatter where ampersands will now always get encoded. + Bugzilla Report 49404. + Fixed bugs: ----------- diff --git a/src/main/org/apache/tools/ant/util/DOMElementWriter.java b/src/main/org/apache/tools/ant/util/DOMElementWriter.java index ad5fe3759..a1fe3de6b 100644 --- a/src/main/org/apache/tools/ant/util/DOMElementWriter.java +++ b/src/main/org/apache/tools/ant/util/DOMElementWriter.java @@ -429,13 +429,7 @@ public class DOMElementWriter { sb.append("""); break; case '&': - int nextSemi = value.indexOf(";", i); - if (nextSemi < 0 - || !isReference(value.substring(i, nextSemi + 1))) { - sb.append("&"); - } else { - sb.append('&'); - } + sb.append("&"); break; default: if (isLegalCharacter(c)) { diff --git a/src/tests/antunit/taskdefs/optional/junit/xmlformatter-test.xml b/src/tests/antunit/taskdefs/optional/junit/xmlformatter-test.xml index 00c4380b9..959b6b33d 100644 --- a/src/tests/antunit/taskdefs/optional/junit/xmlformatter-test.xml +++ b/src/tests/antunit/taskdefs/optional/junit/xmlformatter-test.xml @@ -79,14 +79,12 @@ public class A extends TestCase { - + value="AssertionFailedError: &amp;amp;&"/> diff --git a/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java b/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java index 0e6d62996..a6f81e39b 100644 --- a/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java @@ -53,17 +53,17 @@ public class DOMElementWriterTest extends TestCase { } 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("20;", w.encode("20;")); 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("&"));