sboag 01/06/20 18:55:19
Modified: java/src/org/apache/xpath/axes FilterExprWalker.java
java/src/org/apache/xpath/objects XNodeSet.java
Log:
In the FilterExpressionWalker, use asIterator instead of execute/setRoot,
as it is saver.
In XNodeSet, always do a cloneWithReset, as it is safer.
These are the fix for the Norm Walsh bug posted 06/20/2001 01:36 PM.
Either of these by themselves will fix the problem. But I'm worried
the FilterExpressionWalker fix by itself will leave exposures elsewhere.
The XNodeSet fix will allow for absolute safety, but is much more
expensive... using asIterator where we can will compensate for
this by avoiding an XObject/XNodeSet altogether.
Revision Changes Path
1.17 +3 -7
xml-xalan/java/src/org/apache/xpath/axes/FilterExprWalker.java
Index: FilterExprWalker.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/FilterExprWalker.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- FilterExprWalker.java 2001/06/15 17:54:22 1.16
+++ FilterExprWalker.java 2001/06/21 01:55:17 1.17
@@ -144,7 +144,6 @@
// so we have to set up the variable context, execute the expression,
// and then restore the variable context.
- XObject obj;
if(m_lpi.getIsTopLevel())
{
// System.out.println("calling
m_expr.execute(m_lpi.getXPathContext())");
@@ -154,17 +153,14 @@
int savedStart = vars.getStackFrame();
vars.setStackFrame(m_lpi.m_stackFrame);
- obj = m_expr.execute(m_lpi.getXPathContext());
+ m_nodeSet = m_expr.asIterator(xctxt, root);
// These two statements need to be combined into one operation.
vars.setStackFrame(savedStart);
}
else
- obj = m_expr.execute(m_lpi.getXPathContext());
-
- // System.out.println("Back from
m_expr.execute(m_lpi.getXPathContext()): "+obj);
- m_nodeSet = (null != obj) ? obj.iter() : null;
-
+ m_nodeSet = m_expr.asIterator(xctxt, root);
+
m_peek = DTM.NULL;
}
catch (javax.xml.transform.TransformerException se)
1.16 +4 -16 xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java
Index: XNodeSet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XNodeSet.java 2001/06/19 21:46:30 1.15
+++ XNodeSet.java 2001/06/21 01:55:18 1.16
@@ -378,25 +378,13 @@
*/
public DTMIterator iter()
{
-
- // System.out.println("In XNodeSet.iter()");
- DTMIterator ns = (DTMIterator) m_obj;
-
- // System.out.println("Is a ContextNodeList: "+ns);
- if (ns.isFresh()) // bit of a hack...
+ try
{
- return ns;
+ return ((DTMIterator) m_obj).cloneWithReset();
}
- else
+ catch (CloneNotSupportedException cnse)
{
- try
- {
- return ns.cloneWithReset();
- }
- catch (CloneNotSupportedException cnse)
- {
- throw new RuntimeException(cnse.getMessage());
- }
+ throw new RuntimeException(cnse.getMessage());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]