[ https://issues.apache.org/jira/browse/XALANC-720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13149153#comment-13149153 ]
Scott Exton commented on XALANC-720: ------------------------------------ I realise that there is a problem with the original XSLT. I have fixed the problem with the XSLT, but I was hoping that the xalan-c code would detect the infinite loop within the XSLT and return an error, rather than going into the infinite loop in the first place. So, is there any way that xalan-c can detect the error in the XSLT, rather than going into an infinite loop? > 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-unsubscr...@xml.apache.org For additional commands, e-mail: xalan-dev-h...@xml.apache.org