DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17400>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17400

org.apache.xpath.axes.AxesWalker getLastPos: duplicate predicate testing

           Summary: org.apache.xpath.axes.AxesWalker getLastPos: duplicate
                    predicate testing
           Product: XalanJ2
           Version: 2.4Dx
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: org.apache.xpath
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


In class org.apache.xpath.axes.AxesWalker method getLastPos there's a fragment
of code:
 walker.setPredicateCount(walker.getPredicateCount() - 1);

Thus, in expression x[last() != position()][true()] first predicate is checked 
twice.

XML sample:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
   <item>1</item>
   <item>2</item>
   <item>3</item>
</doc>

Result of 
 <xsl:copy-of select="/doc/item[last() != position()][true()]"/>

is
 <item>1</item>

and should be
 <item>1</item>
 <item>2</item>

XSL work-around:
 <xsl:copy-of select="(/doc/item[last() != position()])[true()]"/>

Java code fix: replace code line in org.apache.xpath.axes.AxesWalker getLastPos:
 walker.setPredicateCount(walker.getPredicateCount() - 1);
to
 walker.setPredicateCount(this.m_predicateIndex);

Reply via email to