diff --git a/CONTRIBUTORS b/CONTRIBUTORS index b174309af..e721b2ffe 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -423,6 +423,7 @@ Takashi Okamoto TAMURA Kent Taoufik Romdhane Tariq Master +Taylor Smock Thomas Aglassinger Thomas Butz Thomas Christen diff --git a/WHATSNEW b/WHATSNEW index 9ea8607fc..dee8ed63c 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -18,6 +18,9 @@ Fixed bugs: PropertyHelper implementations - for example when using AntXtras. Bugzilla Report 65799 +* legacy-xml reporter of the junitlauncher task now escapes ]]> when writing CDATA. + Bugzilla Report 65833 + Other changes: -------------- diff --git a/contributors.xml b/contributors.xml index 266686349..f0f5197c7 100644 --- a/contributors.xml +++ b/contributors.xml @@ -1744,6 +1744,10 @@ Tariq Master + + Taylor + Smock + Thomas Aglassinger diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LegacyXmlResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LegacyXmlResultFormatter.java index d86c35b3f..3db122791 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LegacyXmlResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LegacyXmlResultFormatter.java @@ -299,7 +299,7 @@ class LegacyXmlResultFormatter extends AbstractJUnitResultFormatter implements T } writeAttribute(writer, ATTR_TYPE, t.getClass().getName()); // write out the stacktrace - writer.writeCData(StringUtils.getStackTrace(t)); + this.writeCDataSafely(writer, StringUtils.getStackTrace(t)); } writer.writeEndElement(); } @@ -318,7 +318,7 @@ class LegacyXmlResultFormatter extends AbstractJUnitResultFormatter implements T } writeAttribute(writer, ATTR_TYPE, t.getClass().getName()); // write out the stacktrace - writer.writeCData(StringUtils.getStackTrace(t)); + this.writeCDataSafely(writer, StringUtils.getStackTrace(t)); } writer.writeEndElement(); } @@ -345,6 +345,16 @@ class LegacyXmlResultFormatter extends AbstractJUnitResultFormatter implements T writer.writeEndElement(); } + /** + * Write cdata safely (escape special sequence {@code "]]>"}) + * @param writer The xml writer to use + * @param cdata The cdata to write + * @see Bugzilla #65833 + */ + private void writeCDataSafely(final XMLStreamWriter writer, final String cdata) throws XMLStreamException { + writer.writeCData(cdata.replace("]]>", "]]]]>")); + } + private void writeCharactersFrom(final Reader reader, final XMLStreamWriter writer) throws IOException, XMLStreamException { final char[] chars = new char[1024]; int numRead = -1;