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;