Uploaded image for project: 'Maven Surefire'
  1. Maven Surefire
  2. SUREFIRE-455

XML delimiter characters in attribute and text content are escaped twice.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.4, 2.4.1
    • Fix Version/s: 2.4.2
    • Component/s: xml generation
    • Labels:
      None
    • Flags:
      Patch

      Description

      XML delimiter characters (left angle bracket, ampersand, etc.) are escaped twice in TEST-*.xml files in surefire-reports directory. For example the left angle bracket is replaced with &lt; instead of < and the right angle bracket with &gt; instead of >

        <testcase time="2.306" classname="MyTest" name="testItem">
          <failure message="expected:&amp;lt;10&amp;gt; but was:&amp;lt;7&amp;gt;" type="junit.framework.AssertionFailedError">
      junit.framework.AssertionFailedError: expected:&amp;lt;10&amp;gt; but was:&amp;lt;7&amp;gt;
              at junit.framework.Assert.fail(Assert.java:47)
              at junit.framework.Assert.failNotSame(Assert.java:278)
              at junit.framework.Assert.assertSame(Assert.java:242)
              at MyTest.testItem(MyTest.java:38)
          </failure>
        </testcase>
      

      The problem is that both org.apache.maven.surefire.report.XMLReporter and org.apache.maven.surefire.util.PrettyPrintXMLWriter are escaping the XML content. As a result the ampersand character is escaped once more time. In addition org.apache.maven.surefire.util.PrettyPrintXMLWriter#escapeXml has implementation error: three characters (ampersand, left angle bracket and right angle bracket) are replaced with &amp;

      In the attached patch (for surefire-2.4.1) I removed org.apache.maven.surefire.report.XMLReporter#escapeAttribute method and fixed org.apache.maven.surefire.util.PrettyPrintXMLWriter#escapeXml implementation. Afterwards the XML report was generated as expected:

        <testcase time="2.306" classname="MyTest" name="testItem">
          <failure message="expected:&lt;10&gt; but was:&lt;7&gt;" type="junit.framework.AssertionFailedError">
      junit.framework.AssertionFailedError: expected:&lt;10&gt; but was:&lt;7&gt;
              at junit.framework.Assert.fail(Assert.java:47)
              at junit.framework.Assert.failNotSame(Assert.java:278)
              at junit.framework.Assert.assertSame(Assert.java:242)
              at MyTest.testItem(MyTest.java:38)
          </failure>
        </testcase>
      

        Attachments

        1. surefire-api.patch
          4 kB
          Todor Todorov

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              todorst Todor Todorov
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: