Can you propose a test for infinite recursion? The only trap I know of is the exhaustion of memory allocation resources, causing a system trap. Once such a trap is issued, it becomes problematic to unroll the allocation stack.
I currently use XSLT in stylesheets that rightfully use recursion to hundreds of layers. These lengthy recursions are used to simulate iterating a XSLT variable. I must make sure that there is enough heap or memory mapped resources to accommodate these lengthy recursions. Variables in XSLT, once assigned a value, cannot be reassigned in the same template scope. I have also created a virtual database using a custom library of XPath extension functions that has true content replacement capability, sorting, and indexing. But using these extensions create stylesheets that are not portable to other platforms. - Steven J. Hathaway > > [ > 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 > > --------------------------------------------------------------------- To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org For additional commands, e-mail: xalan-dev-h...@xml.apache.org