You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2010/06/16 15:42:39 UTC
svn commit: r955226 - in /ant/core/trunk: WHATSNEW
src/main/org/apache/tools/ant/util/DOMElementWriter.java
src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java
Author: bodewig
Date: Wed Jun 16 13:42:39 2010
New Revision: 955226
URL: http://svn.apache.org/viewvc?rev=955226&view=rev
Log:
use a better approach to encode CDATA end markers in CDATA sections as suggested by Mark Lassau and Wikipedia. PR 49404
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/main/org/apache/tools/ant/util/DOMElementWriter.java
ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java
Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=955226&r1=955225&r2=955226&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Jun 16 13:42:39 2010
@@ -20,6 +20,9 @@ Changes that could break older environme
ampersands so that { remained { rather than being turned
into {. This is no longer the case, ampersands will now
be encoded unconditionally.
+ Also DOMElementWriter#encodeData will treat CDATA sections containing a
+ literal "]]>" sequence different now - it will split the CDATA
+ section between the second "]" and ">" and create two sections.
This affects <echoxml> task as well as the XML logger or JUnit
formatter where ampersands will now always get encoded.
Bugzilla Report 49404.
Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/DOMElementWriter.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/DOMElementWriter.java?rev=955226&r1=955225&r2=955226&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/DOMElementWriter.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/DOMElementWriter.java Wed Jun 16 13:42:39 2010
@@ -467,19 +467,7 @@ public class DOMElementWriter {
}
}
- String result = sb.substring(0);
- int cdEnd = result.indexOf("]]>");
- while (cdEnd != -1) {
- sb.setLength(cdEnd);
- // CheckStyle:MagicNumber OFF
- sb.append("]]>")
- .append(result.substring(cdEnd + 3));
- // CheckStyle:MagicNumber ON
- result = sb.substring(0);
- cdEnd = result.indexOf("]]>");
- }
-
- return result;
+ return sb.toString().replace("]]>", "]]]]><![CDATA[>");
}
/**
Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java?rev=955226&r1=955225&r2=955226&view=diff
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java (original)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java Wed Jun 16 13:42:39 2010
@@ -90,11 +90,11 @@ public class DOMElementWriterTest extend
public void testCDATAEndEncoding() {
assertEquals("]>", w.encodedata("]>"));
assertEquals("]]", w.encodedata("]]"));
- assertEquals("]]>", w.encodedata("]]>"));
- assertEquals("]]>A", w.encodedata("]]>A"));
- assertEquals("A]]>", w.encodedata("A]]>"));
- assertEquals("A]]>A", w.encodedata("A]]>A"));
- assertEquals("A]]>B]]>C",
+ assertEquals("]]]]><![CDATA[>", w.encodedata("]]>"));
+ assertEquals("]]]]><![CDATA[>A", w.encodedata("]]>A"));
+ assertEquals("A]]]]><![CDATA[>", w.encodedata("A]]>"));
+ assertEquals("A]]]]><![CDATA[>A", w.encodedata("A]]>A"));
+ assertEquals("A]]]]><![CDATA[>B]]]]><![CDATA[>C",
w.encodedata("A]]>B]]>C"));
}