svn commit: r833846 - in /struts/sandbox/trunk/struts2-uel-plugin: ./ src/main/java/org/apache/struts2/uelplugin/ src/main/java/org/apache/struts2/uelplugin/elresolvers/ src/main/java/org/apache/struts2/uelplugin/reflection/ src/main/resources/ src/tes...

View: New views
1 Messages — Rating Filter:   Alert me  

svn commit: r833846 - in /struts/sandbox/trunk/struts2-uel-plugin: ./ src/main/java/org/apache/struts2/uelplugin/ src/main/java/org/apache/struts2/uelplugin/elresolvers/ src/main/java/org/apache/struts2/uelplugin/reflection/ src/main/resources/ src/tes...

by musachy-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Author: musachy
Date: Sun Nov  8 08:18:59 2009
New Revision: 833846

URL: http://svn.apache.org/viewvc?rev=833846&view=rev
Log:
add test, prevent method evaluation, organize classes

Added:
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java
      - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java
      - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java
      - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml
Removed:
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java
Modified:
    struts/sandbox/trunk/struts2-uel-plugin/pom.xml
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java
    struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
    struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java

Modified: struts/sandbox/trunk/struts2-uel-plugin/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/pom.xml?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/pom.xml (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/pom.xml Sun Nov  8 08:18:59 2009
@@ -1,5 +1,4 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.struts</groupId>
@@ -56,6 +55,12 @@
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>org.apache.struts</groupId>
+            <artifactId>struts2-junit-plugin</artifactId>
+            <version>2.2.0-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>${struts2.springPlatformVersion}</version>
@@ -85,10 +90,10 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.mortbay.jetty</groupId>
-            <artifactId>jsp-2.1</artifactId>
-            <version>6.1.3</version>
-            <scope>provided</scope>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymock</artifactId>
+            <version>2.4</version>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>commons-beanutils</groupId>
@@ -111,5 +116,11 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>jsp-api</artifactId>
+            <version>2.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java Sun Nov  8 08:18:59 2009
@@ -1,18 +1,16 @@
 package org.apache.struts2.uelplugin;
 
 import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.TextProviderFactory;
-import com.opensymphony.xwork2.TextProvider;
 import com.opensymphony.xwork2.LocaleProvider;
-import com.opensymphony.xwork2.util.CompoundRoot;
+import com.opensymphony.xwork2.TextProvider;
+import com.opensymphony.xwork2.TextProviderFactory;
 import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.commons.lang.xwork.StringUtils;
 
 import javax.el.FunctionMapper;
 import java.lang.reflect.Method;
-import java.util.Map;
 import java.util.HashMap;
-
-import org.apache.commons.lang.xwork.StringUtils;
+import java.util.Map;
 
 /**
  * <p>Builtin function availabe from UEL. Available functions are</p>

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java Sun Nov  8 08:18:59 2009
@@ -4,7 +4,10 @@
 import de.odysseus.el.util.SimpleContext;
 import org.apache.struts2.uelplugin.elresolvers.*;
 
-import javax.el.*;
+import javax.el.BeanELResolver;
+import javax.el.CompositeELResolver;
+import javax.el.FunctionMapper;
+import javax.el.VariableMapper;
 
 
 /**
@@ -13,11 +16,13 @@
  */
 public class CompoundRootELContext extends SimpleContext {
     private final static BuiltinFunctionMapper BUILTIN_FUNCTION_MAPPER = new BuiltinFunctionMapper();
+
     public CompoundRootELContext(final Container container) {
         super(new CompositeELResolver() {
             {
+                add(new MethodInvocationGuardELResolver(container));
                 add(new CompoundRootELResolver(container));
-                add(new ValueStackContextResolver());
+                add(new ValueStackContextReferenceELResolver(container));
                 add(new XWorkBeanELResolver(container));
                 add(new XWorkListELResolver(container));
                 add(new XWorkMapELResolver(container));

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java Sun Nov  8 08:18:59 2009
@@ -1,16 +1,21 @@
 package org.apache.struts2.uelplugin;
 
-import de.odysseus.el.misc.TypeConverter;
 import de.odysseus.el.misc.NumberOperations;
+import de.odysseus.el.misc.TypeConverter;
+import de.odysseus.el.tree.Bindings;
+import de.odysseus.el.tree.Node;
 import de.odysseus.el.tree.impl.Builder;
 import de.odysseus.el.tree.impl.Parser;
 import de.odysseus.el.tree.impl.Scanner;
 import de.odysseus.el.tree.impl.ast.AstBinary;
 import de.odysseus.el.tree.impl.ast.AstNode;
 import de.odysseus.el.tree.impl.ast.AstUnary;
-import de.odysseus.el.tree.impl.ast.AstIdentifier;
 import org.apache.commons.lang.xwork.StringUtils;
 
+import javax.el.ELContext;
+import javax.el.MethodInfo;
+import javax.el.ValueReference;
+
 /**
  * Plugs into JUEL parser to supper expressions like "#obj", to provide some level
  * of backward compatibility with OGNL
@@ -54,9 +59,7 @@
      */
     static Parser.ExtensionHandler SHARP_HANDLER = new Parser.ExtensionHandler(Parser.ExtensionPoint.UNARY) {
         public AstNode createAstNode(AstNode... children) {
-            //AstIdentifier astIdentifier = (AstIdentifier) children[0];
-            //ValueStackAstIdentifier valueStackAstIdentifier = new ValueStackAstIdentifier(astIdentifier.getName(), astIdentifier.getIndex());
-            return new AstUnary(children[0], SHARP_OPERATOR);
+            return new DelegateAstNode(children[0]);
         }
     };
 
@@ -123,3 +126,59 @@
         return new ExtendedParser(this, expression);
     }
 }
+
+class DelegateAstNode extends AstNode {
+    private final AstNode child;
+
+    public DelegateAstNode(AstNode child) {
+        this.child = child;
+    }
+
+    public void appendStructure(StringBuilder builder, Bindings bindings) {
+        child.appendStructure(builder, bindings);
+    }
+
+    public Object eval(Bindings bindings, ELContext context) {
+        return child.eval(bindings, context);
+    }
+
+    public int getCardinality() {
+        return child.getCardinality();
+    }
+
+    public Node getChild(int i) {
+        return child.getChild(i);
+    }
+
+    public MethodInfo getMethodInfo(Bindings bindings, ELContext context, Class<?> returnType, Class<?>[] paramTypes) {
+        return child.getMethodInfo(bindings, context, returnType, paramTypes);
+    }
+
+    public Class<?> getType(Bindings bindings, ELContext context) {
+        return child.getType(bindings, context);
+    }
+
+    public ValueReference getValueReference(Bindings bindings, ELContext context) {
+        return child.getValueReference(bindings, context);
+    }
+
+    public Object invoke(Bindings bindings, ELContext context, Class<?> returnType, Class<?>[] paramTypes, Object[] paramValues) {
+        return child.invoke(bindings, context, returnType, paramTypes, paramValues);
+    }
+
+    public boolean isLeftValue() {
+        return child.isLeftValue();
+    }
+
+    public boolean isLiteralText() {
+        return child.isLiteralText();
+    }
+
+    public boolean isReadOnly(Bindings bindings, ELContext context) {
+        return child.isReadOnly(bindings, context);
+    }
+
+    public void setValue(Bindings bindings, ELContext context, Object value) {
+        child.setValue(bindings, context, value);
+    }
+}

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java Sun Nov  8 08:18:59 2009
@@ -4,13 +4,10 @@
 import de.odysseus.el.tree.TreeBuilder;
 
 import javax.el.ExpressionFactory;
-import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import java.util.Properties;
 
-import org.apache.struts2.uelplugin.ExpressionFactoryHolder;
-
 /**
  * Responsible for creating the ExpressionFactory that will be used by the
  * UelValueStack

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java Sun Nov  8 08:18:59 2009
@@ -9,15 +9,15 @@
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.logging.Logger;
 import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import org.apache.struts2.uelplugin.elresolvers.AccessorsContextKey;
+import org.apache.struts2.uelplugin.elresolvers.XWorkValueStackContext;
 
 import javax.el.ELContext;
 import javax.el.ExpressionFactory;
 import javax.el.PropertyNotFoundException;
 import javax.el.ValueExpression;
+import java.io.Serializable;
 import java.util.Map;
 import java.util.TreeMap;
-import java.io.Serializable;
 
 /**
  * A ValueStack that uses Unified EL as the underlying Expression Language.
@@ -95,7 +95,7 @@
                 expr = "#{" + expr + "}";
             }
 
-            elContext.putContext(AccessorsContextKey.class, context);
+            elContext.putContext(XWorkValueStackContext.class, context);
             elContext.putContext(XWorkConverter.class, xworkConverter);
             elContext.putContext(CompoundRoot.class, root);
 
@@ -195,7 +195,7 @@
             if (expr != null && !expr.startsWith("${") && !expr.startsWith("#{")) {
                 expr = "#{" + expr + "}";
             }
-            elContext.putContext(AccessorsContextKey.class, context);
+            elContext.putContext(XWorkValueStackContext.class, context);
             elContext.putContext(XWorkConverter.class, xworkConverter);
             elContext.putContext(CompoundRoot.class, root);
 

Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java)
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java&p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java&r1=833776&r2=833846&rev=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,26 +1,26 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.ObjectFactory;
 import com.opensymphony.xwork2.conversion.NullHandler;
 import com.opensymphony.xwork2.conversion.ObjectTypeDeterminer;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
 
-import javax.el.ELResolver;
 import javax.el.ELContext;
-import java.util.Iterator;
+import javax.el.ELResolver;
 import java.beans.FeatureDescriptor;
+import java.util.Iterator;
 
 
-public abstract class AbstractResolver extends ELResolver {
-    protected ReflectionProvider reflectionProvider;
-    protected XWorkConverter xworkConverter;
-    protected NullHandler nullHandler;
-    protected ObjectTypeDeterminer objectTypeDeterminer;
-    protected ObjectFactory objectFactory;
+public abstract class AbstractELResolver extends ELResolver {
+    protected final ReflectionProvider reflectionProvider;
+    protected final XWorkConverter xworkConverter;
+    protected final NullHandler nullHandler;
+    protected final ObjectTypeDeterminer objectTypeDeterminer;
+    protected final ObjectFactory objectFactory;
 
-    public AbstractResolver(Container container) {
+    public AbstractELResolver(Container container) {
         this.reflectionProvider = container.getInstance(ReflectionProvider.class);
         this.xworkConverter = container.getInstance(XWorkConverter.class);
         this.nullHandler = container.getInstance(NullHandler.class, "java.lang.Object");

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,9 +1,9 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.CompoundRoot;
 import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
-import com.opensymphony.xwork2.inject.Container;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.lang.xwork.StringUtils;
@@ -16,7 +16,7 @@
  * An ELResolver that is capable of resolving properties against the
  * CompoundRoot if available in the ELContext.
  */
-public class CompoundRootELResolver extends AbstractResolver {
+public class CompoundRootELResolver extends AbstractELResolver {
 
     public CompoundRootELResolver(Container container) {
         super(container);
@@ -48,7 +48,7 @@
             return root.get(0);
         }
 
-        Map<String, Object> reflectionContext = (Map) elContext.getContext(AccessorsContextKey.class);
+        Map<String, Object> reflectionContext = (Map) elContext.getContext(XWorkValueStackContext.class);
 
         Object bean = findObjectForProperty(root, propertyName);
         if (bean != null) {
@@ -86,7 +86,7 @@
         }
 
         CompoundRoot root = (CompoundRoot) context.getContext(CompoundRoot.class);
-        Map<String, Object> reflectionContext = (Map) context.getContext(AccessorsContextKey.class);
+        Map<String, Object> reflectionContext = (Map) context.getContext(XWorkValueStackContext.class);
         String propertyName = (String) property;
         try {
             if (base == null && property != null && root != null) {

Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java?rev=833846&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java Sun Nov  8 08:18:59 2009
@@ -0,0 +1,34 @@
+package org.apache.struts2.uelplugin.elresolvers;
+
+import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+
+import javax.el.ELContext;
+import javax.el.ELException;
+import java.util.Map;
+
+/**
+ * Will throw an exception if invoke is called and method invocation is not allowed
+ */
+public class MethodInvocationGuardELResolver extends AbstractELResolver {
+    public MethodInvocationGuardELResolver(Container container) {
+        super(container);
+    }
+
+    public Object getValue(ELContext context, Object base, Object property) {
+        return null;
+    }
+
+    public void setValue(ELContext context, Object base, Object property, Object value) {
+    }
+
+    @Override
+    public Object invoke(ELContext elContext, Object base, Object method, Class<?>[] paramTypes, Object[] params) {
+        Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
+        if (ReflectionContextState.isDenyMethodExecution(context)) {
+            //you aint invoking this
+            throw new ELException("Method ivocations are disabled");
+        } else
+            return null;
+    }
+}

Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java)
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java&p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java&r1=833776&r2=833846&rev=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,29 +1,38 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.commons.lang.xwork.StringUtils;
 
-import javax.el.ELResolver;
 import javax.el.ELContext;
-import java.util.Iterator;
 import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import java.util.Map;
 
-import org.apache.commons.lang.xwork.StringUtils;
 
+public class ValueStackContextReferenceELResolver extends AbstractELResolver {
+    public ValueStackContextReferenceELResolver(Container container) {
+        super(container);
+    }
 
-public class ValueStackContextResolver extends ELResolver {
-    public Object getValue(ELContext context, Object base, Object property) {
+    public Object getValue(ELContext elContext, Object base, Object property) {
         String objectName = property.toString();
         if (StringUtils.startsWith(objectName, "#")) {
             objectName = StringUtils.removeStart(property.toString(), "#");
 
             ActionContext actionContext = ActionContext.getContext();
-            if (context != null) {
+            if (elContext != null) {
                 ValueStack valueStack = actionContext.getValueStack();
                 if (valueStack != null) {
                     Object obj = valueStack.getContext().get(objectName);
                     if (obj != null) {
-                        context.setPropertyResolved(true);
+                        Map<String, Object> reflectionContext = (Map) elContext.getContext(XWorkValueStackContext.class);
+
+                        reflectionContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, obj.getClass());
+                        reflectionContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, objectName);
+                        elContext.setPropertyResolved(true);
                         return obj;
                     }
                 }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,17 +1,16 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
-import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 
 import javax.el.ELContext;
 import javax.el.ELException;
-import java.util.List;
-import java.util.Map;
 import java.lang.reflect.Array;
+import java.util.Map;
 
 
-public class XWorkArrayELResolver extends AbstractResolver {
+public class XWorkArrayELResolver extends AbstractELResolver {
     public XWorkArrayELResolver(Container container) {
         super(container);
     }
@@ -19,7 +18,7 @@
     public Object getValue(ELContext elContext, Object target, Object property) {
         if (target != null && property != null && target.getClass().isArray()) {
 
-            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+            Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
 
             Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
             String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
@@ -74,7 +73,7 @@
     public void setValue(ELContext elContext, Object target, Object property, Object value) {
         if (target != null && property != null && target.getClass().isArray()) {
 
-            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+            Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
 
             Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
             String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sun Nov  8 08:18:59 2009
@@ -9,14 +9,14 @@
 import javax.el.ELContext;
 import java.util.Map;
 
-public class XWorkBeanELResolver extends AbstractResolver {
+public class XWorkBeanELResolver extends AbstractELResolver {
     public XWorkBeanELResolver(Container container) {
         super(container);
     }
 
     public Object getValue(ELContext elContext, Object target, Object property) {
         if (target != null && property != null) {
-            Map<String, Object> reflectionContext = (Map<String, Object>) elContext.getContext(AccessorsContextKey.class);
+            Map<String, Object> reflectionContext = (Map<String, Object>) elContext.getContext(XWorkValueStackContext.class);
             String propertyName = property.toString();
             Class targetType = target.getClass();
 
@@ -48,7 +48,7 @@
     public void setValue(ELContext elContext, Object target, Object property, Object value) {
         if (target != null && property != null) {
             try {
-                Map<String, Object> reflectionContext = (Map<String, Object>) elContext.getContext(AccessorsContextKey.class);
+                Map<String, Object> reflectionContext = (Map<String, Object>) elContext.getContext(XWorkValueStackContext.class);
                 String propertyName = property.toString();
                 Class targetType = target.getClass();
 

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,16 +1,16 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
-import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.XWorkException;
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
+import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
-import com.opensymphony.xwork2.XWorkException;
 
 import javax.el.ELContext;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Collection;
 
-public class XWorkListELResolver extends AbstractResolver {
+public class XWorkListELResolver extends AbstractELResolver {
     public XWorkListELResolver(Container container) {
         super(container);
     }
@@ -18,7 +18,7 @@
     public Object getValue(ELContext elContext, Object target, Object property) {
         if (target != null && property != null && target instanceof List) {
 
-            Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+            Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
             List list = (List) target;
 
             Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
@@ -82,7 +82,7 @@
     }
 
     public void setValue(ELContext elContext, Object target, Object property, Object value) {
-        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+        Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
         if (target != null && property != null && target instanceof List) {
             Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
             String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java Sun Nov  8 08:18:59 2009
@@ -1,15 +1,14 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
-import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 
 import javax.el.ELContext;
 import java.util.Map;
-import java.util.List;
 import java.util.WeakHashMap;
 
-public class XWorkMapELResolver extends AbstractResolver {
+public class XWorkMapELResolver extends AbstractELResolver {
     private final Map<Key, Class> keyClassCache = new WeakHashMap<Key, Class>();
 
     public XWorkMapELResolver(Container container) {
@@ -17,7 +16,7 @@
     }
 
     public Object getValue(ELContext elContext, Object target, Object property) {
-        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+        Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
 
         if (target != null && property != null && target instanceof Map) {
             Object result = null;
@@ -84,12 +83,13 @@
     }
 
     public void setValue(ELContext elContext, Object target, Object property, Object value) {
-        Map<String, Object> context = (Map) elContext.getContext(AccessorsContextKey.class);
+        Map<String, Object> context = (Map) elContext.getContext(XWorkValueStackContext.class);
 
         if (target != null && property != null && target instanceof Map) {
             Object key = getKey(context, property);
             Map map = (Map) target;
-            map.put(key, getValue(context, value));
+            map.put(key, value);
+            elContext.setPropertyResolved(true);
         }
     }
 

Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java)
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java&p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java&r1=833776&r2=833846&rev=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java Sun Nov  8 08:18:59 2009
@@ -1,5 +1,7 @@
 package org.apache.struts2.uelplugin.elresolvers;
 
+import java.util.Map;
 
-public interface AccessorsContextKey {
+
+public interface XWorkValueStackContext extends Map {
 }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java Sun Nov  8 08:18:59 2009
@@ -8,9 +8,7 @@
     /**
      * Invoked just before storing a class type within a cache instance.
      *
-     * @param type
-     *          The class that is to be stored.
-     *
+     * @param type The class that is to be stored.
      * @return True if the class can be cached, false otherwise.
      */
     boolean shouldCache(Class type);

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java Sun Nov  8 08:18:59 2009
@@ -1,78 +1,68 @@
 package org.apache.struts2.uelplugin.reflection;
 
-import java.util.Map;
-import java.lang.reflect.Member;
 import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Member;
 import java.lang.reflect.Modifier;
+import java.util.Map;
 
 
 /**
  * Taken from OGNL
  */
-public class DefaultMemberAccess implements MemberAccess
-{
-    public boolean      allowPrivateAccess = false;
-    public boolean      allowProtectedAccess = false;
-    public boolean      allowPackageProtectedAccess = false;
-
- /*===================================================================
- Constructors
-  ===================================================================*/
- public DefaultMemberAccess(boolean allowAllAccess)
- {
-    this(allowAllAccess, allowAllAccess, allowAllAccess);
- }
+public class DefaultMemberAccess implements MemberAccess {
+    public boolean allowPrivateAccess = false;
+    public boolean allowProtectedAccess = false;
+    public boolean allowPackageProtectedAccess = false;
+
+    /*===================================================================
+         Constructors
+       ===================================================================*/
+    public DefaultMemberAccess(boolean allowAllAccess) {
+        this(allowAllAccess, allowAllAccess, allowAllAccess);
+    }
 
- public DefaultMemberAccess(boolean allowPrivateAccess, boolean allowProtectedAccess, boolean allowPackageProtectedAccess)
- {
-    super();
-    this.allowPrivateAccess = allowPrivateAccess;
-    this.allowProtectedAccess = allowProtectedAccess;
-    this.allowPackageProtectedAccess = allowPackageProtectedAccess;
- }
+    public DefaultMemberAccess(boolean allowPrivateAccess, boolean allowProtectedAccess, boolean allowPackageProtectedAccess) {
+        super();
+        this.allowPrivateAccess = allowPrivateAccess;
+        this.allowProtectedAccess = allowProtectedAccess;
+        this.allowPackageProtectedAccess = allowPackageProtectedAccess;
+    }
 
- /*===================================================================
- Public methods
-  ===================================================================*/
- public boolean getAllowPrivateAccess()
- {
-    return allowPrivateAccess;
- }
+    /*===================================================================
+         Public methods
+       ===================================================================*/
+    public boolean getAllowPrivateAccess() {
+        return allowPrivateAccess;
+    }
 
- public void setAllowPrivateAccess(boolean value)
- {
-    allowPrivateAccess = value;
- }
+    public void setAllowPrivateAccess(boolean value) {
+        allowPrivateAccess = value;
+    }
 
- public boolean getAllowProtectedAccess()
- {
-    return allowProtectedAccess;
- }
+    public boolean getAllowProtectedAccess() {
+        return allowProtectedAccess;
+    }
 
- public void setAllowProtectedAccess(boolean value)
- {
-    allowProtectedAccess = value;
- }
+    public void setAllowProtectedAccess(boolean value) {
+        allowProtectedAccess = value;
+    }
 
- public boolean getAllowPackageProtectedAccess()
- {
-    return allowPackageProtectedAccess;
- }
+    public boolean getAllowPackageProtectedAccess() {
+        return allowPackageProtectedAccess;
+    }
 
- public void setAllowPackageProtectedAccess(boolean value)
- {
-    allowPackageProtectedAccess = value;
- }
+    public void setAllowPackageProtectedAccess(boolean value) {
+        allowPackageProtectedAccess = value;
+    }
 
- /*===================================================================
- MemberAccess interface
-  ===================================================================*/
-    public Object setup(Map context, Object target, Member member, String propertyName)
-    {
-        Object      result = null;
+    /*===================================================================
+         MemberAccess interface
+       ===================================================================*/
+    public Object setup(Map context, Object target, Member member, String propertyName) {
+        Object result = null;
 
         if (isAccessible(context, target, member, propertyName)) {
-            AccessibleObject accessible = (AccessibleObject)member;
+            AccessibleObject accessible = (AccessibleObject) member;
 
             if (!accessible.isAccessible()) {
                 result = Boolean.TRUE;
@@ -82,33 +72,31 @@
         return result;
     }
 
-    public void restore(Map context, Object target, Member member, String propertyName, Object state)
-    {
+    public void restore(Map context, Object target, Member member, String propertyName, Object state) {
         if (state != null) {
-            ((AccessibleObject)member).setAccessible(((Boolean)state).booleanValue());
+            ((AccessibleObject) member).setAccessible(((Boolean) state).booleanValue());
         }
     }
 
     /**
-        Returns true if the given member is accessible or can be made accessible
-        by this object.
+     * Returns true if the given member is accessible or can be made accessible
+     * by this object.
      */
- public boolean isAccessible(Map context, Object target, Member member, String propertyName)
- {
-    int         modifiers = member.getModifiers();
-    boolean     result = Modifier.isPublic(modifiers);
-
-    if (!result) {
-        if (Modifier.isPrivate(modifiers)) {
-            result = getAllowPrivateAccess();
-        } else {
-            if (Modifier.isProtected(modifiers)) {
-                result = getAllowProtectedAccess();
-            } else {
-                result = getAllowPackageProtectedAccess();
-            }
-        }
-    }
-    return result;
+    public boolean isAccessible(Map context, Object target, Member member, String propertyName) {
+        int modifiers = member.getModifiers();
+        boolean result = Modifier.isPublic(modifiers);
+
+        if (!result) {
+            if (Modifier.isPrivate(modifiers)) {
+                result = getAllowPrivateAccess();
+            } else {
+                if (Modifier.isProtected(modifiers)) {
+                    result = getAllowProtectedAccess();
+                } else {
+                    result = getAllowPackageProtectedAccess();
+                }
+            }
+        }
+        return result;
  }
 }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java Sun Nov  8 08:18:59 2009
@@ -9,21 +9,19 @@
     Class key;
     Object value;
 
-    public Entry(Class key, Object value)
-    {
+    public Entry(Class key, Object value) {
         this.key = key;
         this.value = value;
     }
 
-    public String toString()
-    {
+    public String toString() {
         return "Entry[" +
-               "next=" + next +
-               '\n' +
-               ", key=" + key +
-               '\n' +
-               ", value=" + value +
-               '\n' +
-               ']';
+                "next=" + next +
+                '\n' +
+                ", key=" + key +
+                '\n' +
+                ", value=" + value +
+                '\n' +
+                ']';
     }
 }
\ No newline at end of file

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java Sun Nov  8 08:18:59 2009
@@ -1,26 +1,25 @@
 package org.apache.struts2.uelplugin.reflection;
 
-import java.util.Map;
 import java.lang.reflect.Member;
+import java.util.Map;
 
 /**
  * Taken from OGNL
  */
-public interface MemberAccess
-{
+public interface MemberAccess {
     /**
-        Sets the member up for accessibility
+     * Sets the member up for accessibility
      */
     public Object setup(Map context, Object target, Member member, String propertyName);
 
     /**
-        Restores the member from the previous setup call.
+     * Restores the member from the previous setup call.
      */
     public void restore(Map context, Object target, Member member, String propertyName, Object state);
 
     /**
-        Returns true if the given member is accessible or can be made accessible
-        by this object.
+     * Returns true if the given member is accessible or can be made accessible
+     * by this object.
      */
- public boolean isAccessible(Map context, Object target, Member member, String propertyName);
+    public boolean isAccessible(Map context, Object target, Member member, String propertyName);
 }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java Sun Nov  8 08:18:59 2009
@@ -1,38 +1,33 @@
 package org.apache.struts2.uelplugin.reflection;
 
-import java.beans.PropertyDescriptor;
 import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
 
 /**
  * Taken from OGNL
  */
-public class ObjectIndexedPropertyDescriptor extends PropertyDescriptor
-{
+public class ObjectIndexedPropertyDescriptor extends PropertyDescriptor {
     private Method indexedReadMethod;
-    private Method          indexedWriteMethod;
-    private Class           propertyType;
+    private Method indexedWriteMethod;
+    private Class propertyType;
 
-    public ObjectIndexedPropertyDescriptor(String propertyName, Class propertyType, Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException
-    {
+    public ObjectIndexedPropertyDescriptor(String propertyName, Class propertyType, Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException {
         super(propertyName, null, null);
         this.propertyType = propertyType;
         this.indexedReadMethod = indexedReadMethod;
         this.indexedWriteMethod = indexedWriteMethod;
     }
 
-    public Method getIndexedReadMethod()
-    {
+    public Method getIndexedReadMethod() {
         return indexedReadMethod;
     }
 
-    public Method getIndexedWriteMethod()
-    {
+    public Method getIndexedWriteMethod() {
         return indexedWriteMethod;
     }
 
-    public Class getPropertyType()
-    {
+    public Class getPropertyType() {
         return propertyType;
     }
 }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml Sun Nov  8 08:18:59 2009
@@ -5,12 +5,9 @@
         "http://struts.apache.org/dtds/struts-2.0.dtd">
 
 <struts>
-    <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="uel"
-          class="org.apache.struts2.uelplugin.UELValueStackFactory"/>
-    <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="uel"
-          class="org.apache.struts2.uelplugin.reflection.GenericReflectionProvider"/>
-    <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="uel"
-          class="org.apache.struts2.uelplugin.UELReflectionContextFactory"/>
+    <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="uel" class="org.apache.struts2.uelplugin.UELValueStackFactory"/>
+    <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="uel" class="org.apache.struts2.uelplugin.reflection.GenericReflectionProvider"/>
+    <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="uel" class="org.apache.struts2.uelplugin.UELReflectionContextFactory"/>
 
     <constant name="struts.valueStackFactory" value="uel"/>
     <constant name="struts.reflectionProvider" value="uel"/>

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java Sun Nov  8 08:18:59 2009
@@ -1,26 +1,26 @@
 package org.apache.struts2.uelplugin;
 
-import com.opensymphony.xwork2.XWorkTestCase;
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 import com.opensymphony.xwork2.inject.ContainerBuilder;
 import com.opensymphony.xwork2.test.StubConfigurationProvider;
-import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.util.CompoundRoot;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
 import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
-import org.springframework.mock.web.MockServletContext;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.uelplugin.reflection.GenericReflectionProvider;
 import org.apache.struts2.util.StrutsTypeConverter;
+import org.springframework.mock.web.MockServletContext;
 
-import javax.servlet.ServletContextEvent;
 import javax.el.ExpressionFactory;
-import java.util.Map;
-import java.text.ParseException;
+import javax.servlet.ServletContextEvent;
 import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Map;
 
 
 public abstract class AbstractUELTest extends XWorkTestCase {

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java Sun Nov  8 08:18:59 2009
@@ -1,9 +1,9 @@
 package org.apache.struts2.uelplugin;
 
-import java.lang.reflect.InvocationTargetException;
-
 import org.apache.struts2.views.util.ContextUtil;
 
+import java.lang.reflect.InvocationTargetException;
+
 
 public class BuiltinFunctionsTest extends AbstractUELTest {
     public void testGetText() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java Sun Nov  8 08:18:59 2009
@@ -2,8 +2,6 @@
 
 import com.opensymphony.xwork2.ActionSupport;
 import com.opensymphony.xwork2.conversion.annotations.Conversion;
-import com.opensymphony.xwork2.conversion.annotations.ConversionType;
-import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
 
 @Conversion
 public class TestAction extends ActionSupport {

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sun Nov  8 08:18:59 2009
@@ -1,8 +1,8 @@
 package org.apache.struts2.uelplugin;
 
 import java.util.Date;
-import java.util.Map;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 
@@ -23,6 +23,11 @@
     private Set set;
 
     private ChildTestAction childTestAction;
+    private boolean invoked;
+
+    public boolean wasInvoked() {
+        return invoked;
+    }
 
     public ChildTestAction getChildTestAction() {
         return childTestAction;
@@ -32,6 +37,10 @@
         this.childTestAction = childTestAction;
     }
 
+    public void invoke() {
+        this.invoked = true;
+    }
+
     public Object getFail() {
         throw new RuntimeException("kaboom");
     }

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java Sun Nov  8 08:18:59 2009
@@ -20,7 +20,7 @@
         assertEquals("Lex Luthor", stack.findValue("${#s0.concat(' ').concat(#s1)}"));
     }
 
-     public void testCallMethodsOnCompundRoot() {
+    public void testCallMethodsOnCompundRoot() {
         //this shuld not fail as the property is defined on a parent class
         TestObject obj = new TestObject();
         root.push(obj);

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java Sun Nov  8 08:18:59 2009
@@ -9,7 +9,7 @@
         TestObject obj = new TestObject();
         obj.setValue("0");
         root.push(obj);
-        
+
         obj = new TestObject();
         obj.setValue("1");
         root.push(obj);

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java Sun Nov  8 08:18:59 2009
@@ -2,8 +2,8 @@
 
 import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
 
-import java.util.*;
 import java.lang.reflect.InvocationTargetException;
+import java.util.*;
 
 
 public class UELStackSetValueTest extends AbstractUELTest {
@@ -46,6 +46,13 @@
         stack.setValue("typedList[1].value", "val");
         assertEquals(2, obj.getTypedList().size());
         assertEquals("val", obj.getTypedList().get(1).getValue());
+
+        //context ref
+        list = new ArrayList();
+        stack.getContext().put("theTypedList", list);
+        stack.setValue("#theTypedList[0]", "val");
+        assertEquals(1, list.size());
+        assertEquals("val", list.get(0));
     }
 
     public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
@@ -85,6 +92,13 @@
         stack.setValue("typedMap[1].value", "val");
         assertEquals(1, obj.getTypedMap().size());
         assertEquals("val", obj.getTypedMap().get(1).getValue());
+
+        //context ref
+        map = new HashMap();
+        stack.getContext().put("themap", map);
+        stack.setValue("#themap['str']", "val");
+        assertEquals(1, map.size());
+        assertEquals("val", map.get("str"));
     }
 
     public void testSetPropertiesOnNestedNullObject() {

Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java?rev=833846&r1=833845&r2=833846&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java (original)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java Sun Nov  8 08:18:59 2009
@@ -1,10 +1,10 @@
 package org.apache.struts2.uelplugin;
 
-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
 
-import java.util.Map;
 import java.util.LinkedHashMap;
+import java.util.Map;
 
 
 public class UELValueStackOtherTests extends AbstractUELTest {
@@ -56,7 +56,7 @@
         }
     }
 
-     public void testFailsOnMissingNestedPropertyWithThrowException() {
+    public void testFailsOnMissingNestedPropertyWithThrowException() {
         TestObject obj = new TestObject();
         root.push(obj);
         try {
@@ -123,7 +123,7 @@
         }
     }
 
-     public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInNonDevMode() {
+    public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInNonDevMode() {
         TestAction action = new TestAction();
         stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
         stack.setDevMode("false");
@@ -134,7 +134,7 @@
         assertTrue(conversionErrors.containsKey("bar"));
     }
 
-     public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInDevMode() {
+    public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInDevMode() {
         TestAction action = new TestAction();
         stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
         stack.setDevMode("true");

Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java?rev=833846&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java Sun Nov  8 08:18:59 2009
@@ -0,0 +1,80 @@
+package org.apache.struts2.uelplugin;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.util.CompoundRoot;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+import org.apache.struts2.StrutsTestCase;
+
+import javax.servlet.ServletContextEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+public class VulnerabilityTest extends StrutsTestCase {
+
+    public void testMethodsAreNotInvokedUnlessDenyMethodExecutionIsTrue() {
+        CompoundRoot root = new CompoundRoot();
+        ValueStack stack = new UELValueStack(container);
+        TestObject obj = new TestObject();
+        root.push(obj);
+
+        Map contextMap = stack.getContext();
+        ReflectionContextState.setCreatingNullObjects(contextMap, true);
+        ReflectionContextState.setDenyMethodExecution(contextMap, true);
+        ReflectionContextState.setReportingConversionErrors(contextMap, true);
+
+        //simple
+        stack.findValue("top.invoke()");
+        assertFalse(obj.wasInvoked());
+
+        //nested
+        TestObject nested = new TestObject();
+        obj.setInner(nested);
+        stack.findValue("top.inner.invoke()");
+        assertFalse(nested.wasInvoked());
+    }
+
+    public void testParametersDoesNotAffectSession() throws Exception {
+        HashMap<String, Object> session = new HashMap<String, Object>();
+        ValueStack stack = ActionContext.getContext().getValueStack();
+        stack.getContext().put("session", session);
+        assertSame(session, stack.findValue("#session"));
+
+        //make sure that values can tb set in session
+        stack.setValue("#session['clean']", "clean");
+        assertEquals("clean", stack.findValue("#session['clean']"));
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("bar", "123");
+        params.put("#session.foo", "Foo");
+        params.put("\u0023session[\'user\']", "0wn3d");
+        params.put("\\u0023session[\'user\']", "0wn3d");
+        params.put("\u0023session.user2", "0wn3d");
+        params.put("\\u0023session.user2", "0wn3d");
+        params.put("('\u0023'%20%2b%20'session[\'user3\']')(unused)", "0wn3d");
+        params.put("('\\u0023' + 'session[\\'user4\\']')(unused)", "0wn3d");
+        params.put("('\u0023'%2b'session[\'user5\']')(unused)", "0wn3d");
+        params.put("('\\u0023'%2b'session[\'user5\']')(unused)", "0wn3d");
+        request.setParameters(params);
+
+        executeAction("/test/test.action");
+
+        assertEquals(123, findValueAfterExecute("top.bar"));
+        assertNull(session.get("foo"));
+        assertNull(session.get("user"));
+        assertNull(session.get("user2"));
+        assertNull(session.get("user3"));
+        assertNull(session.get("user4"));
+        assertNull(session.get("user5"));
+    }
+
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        //simulate start up
+        UELServletContextListener listener = new UELServletContextListener();
+        listener.contextInitialized(new ServletContextEvent(servletContext));
+    }
+}

Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml?rev=833846&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml (added)
+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml Sun Nov  8 08:18:59 2009
@@ -0,0 +1,10 @@
+<!DOCTYPE struts PUBLIC
+        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
+        "http://struts.apache.org/dtds/struts-2.0.dtd">
+<struts>
+    <package name="test" namespace="/test" extends="struts-default">
+        <action name="test" class="org.apache.struts2.uelplugin.TestAction">
+            <result>something.jsp</result>
+        </action>
+    </package>
+</struts>
\ No newline at end of file