diff options
author | Taylor Smock <tsmock@fb.com> | 2022-01-21 08:52:25 -0700 |
---|---|---|
committer | Jaikiran Pai <jaikiran@apache.org> | 2022-02-10 08:33:09 +0530 |
commit | aa47924dc2aaac617bfa19731bcbfe6745711eef (patch) | |
tree | 7da47f46101714448655f1c8c23df09eb5bdb3af /src | |
parent | b4a91c7fb325080126b4b9692537766fd396157b (diff) | |
download | ant-aa47924dc2aaac617bfa19731bcbfe6745711eef.tar.gz |
Fix an issue in LegacyXmlResultFormatter with ]]> in stacktraces
Bugzilla Report 65833
This occurs when the stacktrace message contains ]]>, which is the CDATA
end code. There is no escape, so it must be replaced with `]]` + `]]>` +
`<![CDATA[` + `>`, which means that the CDATA section is split.
Signed-off-by: Taylor Smock <tsmock@fb.com>
This closes #175 pull request at github.com/apache/ant
Diffstat (limited to 'src')
-rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/LegacyXmlResultFormatter.java | 14 |
1 files changed, 12 insertions, 2 deletions
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 <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=65833">Bugzilla #65833</a> + */ + private void writeCDataSafely(final XMLStreamWriter writer, final String cdata) throws XMLStreamException { + writer.writeCData(cdata.replace("]]>", "]]]]><![CDATA[>")); + } + private void writeCharactersFrom(final Reader reader, final XMLStreamWriter writer) throws IOException, XMLStreamException { final char[] chars = new char[1024]; int numRead = -1; |