garyp       01/08/25 22:07:05

  Modified:    java/src/org/apache/xpath VariableStack.java
               java/src/org/apache/xpath/operations Variable.java
  Log:
  Fix bug 3265 (http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3265).  Using 
an expression in the evaluate extension function that contains a top-level 
variable was cause an NPE.
  
  Revision  Changes    Path
  1.35      +12 -9     xml-xalan/java/src/org/apache/xpath/VariableStack.java
  
  Index: VariableStack.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/VariableStack.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- VariableStack.java        2001/08/06 05:57:01     1.34
  +++ VariableStack.java        2001/08/26 05:07:04     1.35
  @@ -444,21 +444,24 @@
         org.apache.xalan.templates.ElemTemplateElement prev =
           (org.apache.xalan.templates.ElemTemplateElement) prefixResolver;
   
  -      while ( !(prev.getParentNode() instanceof 
org.apache.xalan.templates.Stylesheet) )
  +      if (!(prev instanceof org.apache.xalan.templates.Stylesheet))
         {
  -        org.apache.xalan.templates.ElemTemplateElement savedprev = prev;
  -
  -        while (null != (prev = prev.getPreviousSiblingElem()))
  +        while ( !(prev.getParentNode() instanceof 
org.apache.xalan.templates.Stylesheet) )
           {
  -          if (prev instanceof org.apache.xalan.templates.ElemVariable)
  +          org.apache.xalan.templates.ElemTemplateElement savedprev = prev;
  +
  +          while (null != (prev = prev.getPreviousSiblingElem()))
             {
  -            vvar = (org.apache.xalan.templates.ElemVariable) prev;
  +            if (prev instanceof org.apache.xalan.templates.ElemVariable)
  +            {
  +              vvar = (org.apache.xalan.templates.ElemVariable) prev;
   
  -            if (vvar.getName().equals(qname))
  -              return getLocalVariable(xctxt, vvar.getIndex());
  +              if (vvar.getName().equals(qname))
  +                return getLocalVariable(xctxt, vvar.getIndex());
  +            }
             }
  +          prev = savedprev.getParentElem();
           }
  -        prev = savedprev.getParentElem();
         }
   
         vvar = prev.getStylesheetRoot().getVariableOrParamComposed(qname);
  
  
  
  1.16      +17 -14    
xml-xalan/java/src/org/apache/xpath/operations/Variable.java
  
  Index: Variable.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Variable.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Variable.java     2001/08/06 22:17:17     1.15
  +++ Variable.java     2001/08/26 05:07:04     1.16
  @@ -206,27 +206,30 @@
   
             org.apache.xalan.templates.ElemTemplateElement prev = 
               (org.apache.xalan.templates.ElemTemplateElement) prefixResolver;
  -            
  -          while ( !(prev.getParentNode() instanceof 
org.apache.xalan.templates.Stylesheet) )
  -          {
  -            org.apache.xalan.templates.ElemTemplateElement savedprev = prev;
   
  -            while (null != (prev = prev.getPreviousSiblingElem()))
  +          if (!(prev instanceof org.apache.xalan.templates.Stylesheet))
  +          {            
  +            while ( !(prev.getParentNode() instanceof 
org.apache.xalan.templates.Stylesheet) )
               {
  -              if(prev instanceof org.apache.xalan.templates.ElemVariable)
  +              org.apache.xalan.templates.ElemTemplateElement savedprev = 
prev;
  +
  +              while (null != (prev = prev.getPreviousSiblingElem()))
                 {
  -                vvar = (org.apache.xalan.templates.ElemVariable) prev;
  -                
  -                if (vvar.getName().equals(m_qname))
  +                if(prev instanceof org.apache.xalan.templates.ElemVariable)
                   {
  -                  m_index = vvar.getIndex();
  -                  m_isGlobal = false;
  -                  m_fixUpWasCalled = true;
  -                  return execute(xctxt);
  +                  vvar = (org.apache.xalan.templates.ElemVariable) prev;
  +                
  +                  if (vvar.getName().equals(m_qname))
  +                  {
  +                    m_index = vvar.getIndex();
  +                    m_isGlobal = false;
  +                    m_fixUpWasCalled = true;
  +                    return execute(xctxt);
  +                  }
                   }
                 }
  +              prev = savedprev.getParentElem();
               }
  -            prev = savedprev.getParentElem();
             }
   
             vvar = 
prev.getStylesheetRoot().getVariableOrParamComposed(m_qname);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to