You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Steven J. Hathaway (Commented) (JIRA)" <xa...@xml.apache.org> on 2011/12/06 08:39:43 UTC

[jira] [Commented] (XALANC-720) Transformation can get stuck in an infinite loop

    [ https://issues.apache.org/jira/browse/XALANC-720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13163417#comment-13163417 ] 

Steven J. Hathaway commented on XALANC-720:
-------------------------------------------

In the Xalan/Xerces libraries for C++, the only recovery for indefinite recursion is to trap on memory allocation faults and hopefully the recursion stack can be properly unwound and a useful error displayed to the user application indicating the location and cause of failure.

Code for this may already exist, but I have not tested the limits because it eats up the entire heap allocation for the project - nearly 2GB of virtual memory on 32bit Windows Platforms.

- Steve
                
> Transformation can get stuck in an infinite loop
> ------------------------------------------------
>
>                 Key: XALANC-720
>                 URL: https://issues.apache.org/jira/browse/XALANC-720
>             Project: XalanC
>          Issue Type: Bug
>          Components: XalanC
>    Affects Versions: 1.10
>         Environment: Linux x86 (both 32 and 64-bit) - seen on RHEL 6, Unbuntu and SLES
>            Reporter: Scott Exton
>            Assignee: Brian Minchau
>
> The XalanTransformer::transform function will get stuck in an infinite loop for certain stylesheets. This problem occurs if you execute the following command (using the sample programs):
> XalanTransform test.xml test.xsl test.out, with the following file contents:
> -- test-xml
> <?xml version="1.0" encoding='UTF-8'?><HTTPResponse><ResponseLine><Version>HTTP/1.1</Version><StatusCode>401</StatusCode><Reason>Unauthorized</Reason></ResponseLine><Headers><Header name="content-length">1244</Header><Header name="content-type">text%2Fhtml</Header><Header name="date">Thu,%2010%20Nov%202011%2004%3A21%3A08%20GMT</Header><Header name="cache-control">no-cache</Header><Header name="pragma">no-cache</Header></Headers><Cookies></Cookies></HTTPResponse>
> -- test.xsl
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>         version="1.0">
>         <xsl:strip-space elements="*" />
>         <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8"
>                 indent="yes" />
>         <!-- Initially we start with a copy of the document. -->
>         <xsl:template match="@* | node()">
>                 <xsl:copy>
>                         <xsl:apply-templates select="@* | node()" />
>                 </xsl:copy>
>         </xsl:template>
>         <!--  Add a new header if it doesn't exist -->
>         <xsl:template match="//HTTPResponse/Headers/Header">
>                 <xsl:choose>
>                         <xsl:when test="@name='cache-control'">
>                              <Header Name="hdr-2">val-2</Header>
>                         </xsl:when>
>                         <xsl:otherwise>
>                         </xsl:otherwise>
>                 </xsl:choose>
>                 <xsl:apply-templates select="//HTTPResponse/Headers/Header"/>
>         </xsl:template>
> </xsl:stylesheet>
> --
> In this instance the XalanTransform binary will never complete.  The problem stems from the '<xsl:apply-templates select="//HTTPResponse/Headers/Header"/>' line.  If this line is removed from the XSLT everything works correctly.  So, the XSLT is probably malformed, but the program still shouldn't get stuck in an infinite loop.
> Unfortunately I don't know the xalan-c code at all, but I have managed to work out that we get stuck in the ElemTemplateElement::execute() function.  The following condition,
> currentElement->getInvoker(executionContext) == invoker, is never met, which means that we never break out of the loop.
> Any help would be appreciated.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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