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]

Reply via email to