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");


Reply via email to