You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2004/01/22 02:44:53 UTC

DO NOT REPLY [Bug 26329] New: - Long classpath for JUnit reporter results in stack overflow and JVM crash

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26329>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26329

Long classpath for JUnit reporter results in stack overflow and JVM crash

           Summary: Long classpath for JUnit reporter results in stack
                    overflow and JVM crash
           Product: Ant
           Version: 1.5.1
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Optional Tasks
        AssignedTo: dev@ant.apache.org
        ReportedBy: lauzon@us.ibm.com


I'm creating a report with the JUnitReport task as so:

    <junitreport todir="${dir.test.reports}">
      <fileset dir="${dir.test.reports}" includes="TEST-*.xml"/>
      <report todir="${dir.test.reports}/html"/>
    </junitreport>

The junit-frames.xsl stylesheet converts the generated XML document to an HTML
document. One of the things it does is convert '\' to '\\', presumably so
JavaScript doesn't barf. Unfortunately, if the input contains a very long
classpath, the recursion in the stylesheet causes the stack to get too big and I
get an "Unrecoverable Stack Overflow" and the JVM crashes.

For example, my input XML document contains this:

<property name="prereq.classpath" value="c:\build\foo1.jar;c:\build\foo2.jar;...
[LOTS more!]

and the bottom of the HTML file which was written looks like this:
cur['prereq.classpath'] = 'c:\\build\\foo1.jar;c:\\build\\foo2.jar;... [LOTS
more, but it dies in the middle of outputting, i.e. ends with c:\\build\\]

the offending XSL contains this:

<xsl:template name="JS-escape">
...
        <xsl:when test="contains($string,'\')">
            <xsl:value-of
select="substring-before($string,'\')"/>\\<xsl:call-template name="JS-escape">
                <xsl:with-param name="string"
select="substring-after($string,'\')"/>
            </xsl:call-template>
        </xsl:when>
...
</xsl:template>

It's that recursive call-template to JS-escape which is killing the processing.
I am currently running on Ant 1.5.1, but the XSL document looks exactly the same
in 1.6.0. It probably still fails on 1.6.0.

shawn.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org