jvanzyl     01/03/15 11:28:46

  Modified:    src/java/org/apache/velocity/runtime/parser/node
                        ASTIdentifier.java ASTReference.java
  Log:
  - Fixed a bug reported by David Esposito. We now stop processing
    a reference when we discover a null instead of proceeding as
    we did before.
  
    $hashtable.Customer
  
    always worked because if Customer wasn't valid it didn't matter
    because it was the last portion of the reference, but
  
    $hashtable.Customer.Name
  
    caused a problem because 'Customer' being null passed the null
    into the next stage of processing. it's now caught and everything
    is happy again :-)
  
  Revision  Changes    Path
  1.8       +5 -1      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
  
  Index: ASTIdentifier.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ASTIdentifier.java        2001/02/05 00:44:57     1.7
  +++ ASTIdentifier.java        2001/03/15 19:28:37     1.8
  @@ -71,7 +71,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
  - * @version $Id: ASTIdentifier.java,v 1.7 2001/02/05 00:44:57 geirm Exp $ 
  + * @version $Id: ASTIdentifier.java,v 1.8 2001/03/15 19:28:37 jvanzyl Exp $ 
    */
   package org.apache.velocity.runtime.parser.node;
   
  @@ -200,8 +200,12 @@
           }
   
           if (executor != null)
  +        {
               return executor.execute(o, context);
  +        }            
           else
  +        {
               return null;
  +        }            
       }
   }
  
  
  
  1.21      +20 -3     
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
  
  Index: ASTReference.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- ASTReference.java 2001/02/01 18:22:30     1.20
  +++ ASTReference.java 2001/03/15 19:28:40     1.21
  @@ -79,7 +79,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Christoph Reck</a>
  - * @version $Id: ASTReference.java,v 1.20 2001/02/01 18:22:30 geirm Exp $ 
  + * @version $Id: ASTReference.java,v 1.21 2001/03/15 19:28:40 jvanzyl Exp $ 
   */
   
   public class ASTReference extends SimpleNode
  @@ -146,17 +146,34 @@
           Object result = getVariableValue(context, rootString);
           
           if (result == null)
  +        {
               return null;
  +        }            
   
           /*
  -         *  iteratively work 'down' (it's flat...) the reference
  -         *  to get the value
  +         * Iteratively work 'down' (it's flat...) the reference
  +         * to get the value, but check to make sure that
  +         * every result along the path is valid. For example:
  +         *
  +         * $hashtable.Customer.Name
  +         *
  +         * The $hashtable may be valid, but there is no key
  +         * 'Customer' in the hashtable so we want to stop
  +         * when we find a null value and return the null
  +         * so the error gets logged.
            */
   
           int children = jjtGetNumChildren();
           
           for (int i = 0; i < children; i++)
  +        {
               result = jjtGetChild(i).execute(result,context);
  +            
  +            if (result == null)
  +            {
  +                return null;
  +            }                
  +        }            
       
           return result;
       }
  
  
  

Reply via email to