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

Reply via email to