You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2009/03/12 07:13:11 UTC

svn commit: r752783 - in /velocity/engine/trunk/src: java/org/apache/velocity/runtime/directive/Scope.java test/org/apache/velocity/test/ScopeTestCase.java

Author: nbubna
Date: Thu Mar 12 06:13:10 2009
New Revision: 752783

URL: http://svn.apache.org/viewvc?rev=752783&view=rev
Log:
fix/test Scope get(key) leakage (merge from 2.0 branch)

Modified:
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Scope.java
    velocity/engine/trunk/src/test/org/apache/velocity/test/ScopeTestCase.java

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Scope.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Scope.java?rev=752783&r1=752782&r2=752783&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Scope.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/Scope.java Thu Mar 12 06:13:10 2009
@@ -67,6 +67,16 @@
         return getStorage().entrySet();
     }
 
+    public Object get(Object key)
+    {
+        Object o = super.get(key);
+        if (o == null && parent != null && !containsKey(key))
+        {
+            return parent.get(key);
+        }
+        return o;
+    }
+
     public Object put(Object key, Object value)
     {
         return getStorage().put(key, value);

Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/ScopeTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/ScopeTestCase.java?rev=752783&r1=752782&r2=752783&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/ScopeTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/ScopeTestCase.java Thu Mar 12 06:13:10 2009
@@ -34,6 +34,28 @@
        super(name);
     }
 
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        engine.setProperty(RuntimeConstants.SET_NULL_ALLOWED, true);
+    }
+
+    public void testScopeGetLeakIntoInner()
+    {
+        addTemplate("foo", "#foreach($i in [1..1])#set($foreach.a=$i)"+
+                           "#foreach($j in [2..2])$foreach.a#set($foreach.a=$j)"+
+                           "#foreach($k in [3..3])$foreach.a#end#end$foreach.a#end");
+        assertTmplEquals("121", "foo");
+    }
+
+    public void testScopeGetLeakDoesntHideNullset()
+    {
+        addTemplate("a", "#macro(a)#set($macro.a='a')#b()$macro.a#end"+
+                         "#macro(b)$macro.a#set($macro.a=$null)$!macro.a#end"+
+                         "#a()");
+        assertTmplEquals("aa", "a");
+    }
+
     public void testRootTemplateMergeScope()
     {
         addTemplate("foo", "foo#break($template)bar");