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