Details
Description
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);