[ https://issues.apache.org/jira/browse/XALANJ-2438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12802546#action_12802546 ]
Helge Schulz commented on XALANJ-2438: -------------------------------------- Hello Henry, thank you for looking at my patch. I can confirm the infinite recursion with axes13.xsl. It is in the call path Step.translate -> Step.translateStep -> Step.translatePredicates -> ParentLocationPath.translate -> Step.translate. In the old version it ends, because predicates are removed from Step._predicates. I think we have found another bug, because the evaluation of remaining predicates in ParentLocationPath.translate -> Step.translate is wrong. Therefore remaining predicates will check the wrong element. If I prevent evaluation of predicates in ParentLocationPath.translate by removing them temporally from the step, the infinite recursion is gone and the test creates the right output. This can be done by // Otherwise we create a parent location path with this Step and // the predicates Step, and place the node test on top of that else { ParentLocationPath path = new ParentLocationPath(this,step); try { path.typeCheck(getParser().getSymbolTable()); } catch (TypeCheckError e) { } Vector oldPredicates = _predicates; _predicates = null; path.translate(classGen, methodGen); _predicates = oldPredicates; il.append(new ICONST(DOM.RETURN_PARENT)); } near line 407 in Step.java. I will investigate this further tomorrow. -- Helge Schulz - http://OpenSHORE.org > [PATCH] XSLTC ignores XPath predicates in xsl:key elements > ---------------------------------------------------------- > > Key: XALANJ-2438 > URL: https://issues.apache.org/jira/browse/XALANJ-2438 > Project: XalanJ2 > Issue Type: Bug > Components: XSLTC > Affects Versions: The Latest Development Code > Environment: Linux and Windows XP with Sun JRE 1.5.0_14, 1.5.0_15, > 1.6.0_04 and 1.6.0_05 > Reporter: Helge Schulz > Priority: Blocker > Fix For: The Latest Development Code > > Attachments: PredicateInKey-Sun-JRE-1_5_0_22-Fix.jar, > PredicateInKey-Sun-JRE-1_6_0_18-Fix.jar, > PredicateInKey-Xalan-SVN-r584164.patch, > PredicateInKey-Xalan-SVN-r889881.patch, PredicateInKey-XSLT-Test-1.1.jar, > PredicateInKey-XSLT-Test-1.2.jar, PredicateInKey-XSLT-Test.jar, > PredicateInKey.out, PredicateInKey.xml, PredicateInKey.xsl > > > The Xalan XSLT compiler (XSLTC) ignores XPath predicates in xsl:key > elements since the class 'org.apache.xalan.xsltc.compiler.Stylesheet' > was rearranged in august 2003 to reorder the compilation of top level > XSLT elements (including keys) to respect dependencies between global > XSLT variables and keys. Method 'compileTopLevel' was changed to emit > code also for key elements and not emit code calling the method generated > by 'compileBuildKeys'. For this reason the byte code for each key element > is generated twice: First time into generated method 'buildKeys' from > 'compileBuildKeys' and second time into generated method 'topLevel' > from 'compileTopLevel'. Method 'buildKeys' is still necessary, because > it is called by the XSLT 'document' function, if additional input > documents are loaded later. > Unfortunately the translate method of some XPath elements expected to > be called only once and they remove sub elements while their first execution. > So all XPath predicates get lost in class > 'org.apache.xalan.xsltc.compiler.FilterExpr' > and 'org.apache.xalan.xsltc.compiler.Step' by a remove operation on > the '_predicates' container while the execution from 'compileBuildKeys'. > So 'compileTopLevel' generates wrong code for all key elements containing > predicates in their XPath expressions. > The attached patch changes the 'FilterExpr' and 'Step' class to use an > index variable to determine the current predicate and to not remove them. > This patch was tested with the current Subversion version of Xalan > (last change of Xalan tree in revision 584164) and with Sun JDK 1.5.0_14, > 1.5.0_15, 1.6.0_04 and 1.6.0_05. > This bug exists also in Sun JRE 1.6 (1.6.0 up to 1.6.0_05) and JRE 1.5 > (since 1.5.0_12 up to 1.5.0_15) in classes > 'com.sun.org.apache.xalan.internal.xsltc.compiler.FilterExpr' and > 'com.sun.org.apache.xalan.internal.xsltc.compiler.Step'. The attached > test JAR file contains also patches for these versions and fixes in form > of JAR files to be installed into '../jre/lib/endorsed' directories of > Sun JRE installations. The last Sun JRE version with correct handling > of xls:key elements is 1.5.0_11. > Please add the attached test files to the Xalan test suite. I have > released them under Apache license version 2.0. > Helge Schulz - OpenSHORE.org -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org For additional commands, e-mail: xalan-dev-h...@xml.apache.org