[llvm] r332440 - Escape ]]> in xunit xml output

Alexander Richardson via llvm-commits llvm-commits at lists.llvm.org
Wed May 16 02:00:28 PDT 2018


Author: arichardson
Date: Wed May 16 02:00:28 2018
New Revision: 332440

URL: http://llvm.org/viewvc/llvm-project?rev=332440&view=rev
Log:
Escape ]]> in xunit xml output

Summary:
This sequence ends the CDATA block so any characters after that are no
longer escaped. This can be fixed by replacing "]]>" with "]]]]><![CDATA[>".

Reviewers: cmatthews

Reviewed By: cmatthews

Differential Revision: https://reviews.llvm.org/D46886

Modified:
    llvm/trunk/utils/lit/lit/Test.py
    llvm/trunk/utils/lit/tests/Inputs/xunit-output/bad&name.ini
    llvm/trunk/utils/lit/tests/xunit-output.py

Modified: llvm/trunk/utils/lit/lit/Test.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/Test.py?rev=332440&r1=332439&r2=332440&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/Test.py (original)
+++ llvm/trunk/utils/lit/lit/Test.py Wed May 16 02:00:28 2018
@@ -381,7 +381,9 @@ class Test:
                 encoded_output = self.result.output.encode("utf-8", 'ignore')
             else:
                 encoded_output = self.result.output
-            fil.write(encoded_output)
+            # In the unlikely case that the output contains the CDATA terminator
+            # we wrap it by creating a new CDATA block
+            fil.write(encoded_output.replace("]]>", "]]]]><![CDATA[>"))
             fil.write("]]></failure>\n</testcase>")
         elif self.result.code == UNSUPPORTED:
             unsupported_features = self.getMissingRequiredFeatures()

Modified: llvm/trunk/utils/lit/tests/Inputs/xunit-output/bad&name.ini
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/xunit-output/bad%26name.ini?rev=332440&r1=332439&r2=332440&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/xunit-output/bad&name.ini (original)
+++ llvm/trunk/utils/lit/tests/Inputs/xunit-output/bad&name.ini Wed May 16 02:00:28 2018
@@ -1,7 +1,7 @@
 [global]
 result_code = FAIL
-result_output = & < > "
+result_output = & < > ]]> &"
 
 [results]
 value0 = 1
-value1 = 2.3456
\ No newline at end of file
+value1 = 2.3456

Modified: llvm/trunk/utils/lit/tests/xunit-output.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/xunit-output.py?rev=332440&r1=332439&r2=332440&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/xunit-output.py (original)
+++ llvm/trunk/utils/lit/tests/xunit-output.py Wed May 16 02:00:28 2018
@@ -1,12 +1,14 @@
 # Check xunit output
 # RUN: rm -rf %t.xunit.xml
 # RUN: not %{lit} --xunit-xml-output %t.xunit.xml %{inputs}/xunit-output
+# If xmllint is installed verify that the generated xml is well-formed
+# RUN: sh -c 'if command -v xmllint 2>/dev/null; then xmllint --noout %t.xunit.xml; fi'
 # RUN: FileCheck < %t.xunit.xml %s
 
 # CHECK: <?xml version="1.0" encoding="UTF-8" ?>
 # CHECK: <testsuites>
 # CHECK: <testsuite name='test-data' tests='1' failures='1' skipped='0'>
 # CHECK: <testcase classname='test-data.test-data' name='bad&name.ini' time='{{[0-1]}}.{{[0-9]+}}'>
-# CHECK-NEXT: <failure ><![CDATA[& < > "]]></failure>
+# CHECK-NEXT: <failure ><![CDATA[& < > ]]]]><![CDATA[> &"]]></failure>
 # CHECK: </testsuite>
 # CHECK: </testsuites>




More information about the llvm-commits mailing list