Author: markt
Date: Sat Feb 21 00:44:33 2009
New Revision: 746425

URL: http://svn.apache.org/viewvc?rev=746425&view=rev
Log:
Address Bill's security concerns in previous patch to get TCK to pass under a 
security manager.
TCK passes after this patch with and without security manager.

Modified:
    tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java
    tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java
    tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java

Modified: tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java?rev=746425&r1=746424&r2=746425&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java Sat Feb 21 
00:44:33 2009
@@ -26,6 +26,8 @@
 import javax.el.ValueExpression;
 import javax.el.VariableMapper;
 
+import org.apache.catalina.Globals;
+
 /**
  * Implementation of ELContext
  * 
@@ -61,12 +63,21 @@
 
     private final ELResolver resolver;
 
-    private FunctionMapper functionMapper = NullFunctionMapper; // immutable
+    private FunctionMapper functionMapper;
 
     private VariableMapper variableMapper;
 
     public ELContextImpl() {
-        this(ELResolverImpl.DefaultResolver);
+        this(ELResolverImpl.getDefaultResolver());
+        if (Globals.IS_SECURITY_ENABLED) {
+            functionMapper = new FunctionMapper() {
+                public Method resolveFunction(String prefix, String localName) 
{
+                    return null;
+                }
+            };
+        } else {
+            functionMapper = NullFunctionMapper;
+        }
     }
 
     public ELContextImpl(ELResolver resolver) {

Modified: tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java?rev=746425&r1=746424&r2=746425&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java Sat Feb 21 
00:44:33 2009
@@ -32,8 +32,10 @@
 import javax.el.ResourceBundleELResolver;
 import javax.servlet.jsp.el.VariableResolver;
 
+import org.apache.catalina.Globals;
+
 public final class ELResolverImpl extends ELResolver {
-       
+       /** @deprecated - Use getDefaultResolver(). Needs to be made private */
        public final static ELResolver DefaultResolver = new 
CompositeELResolver();
 
        static {
@@ -69,7 +71,7 @@
                }
 
                if (!context.isPropertyResolved()) {
-                       return DefaultResolver.getValue(context, base, 
property);
+                       return getDefaultResolver().getValue(context, base, 
property);
                }
                return null;
        }
@@ -94,7 +96,7 @@
                }
 
                if (!context.isPropertyResolved()) {
-                       return DefaultResolver.getType(context, base, property);
+                       return getDefaultResolver().getType(context, base, 
property);
                }
                return null;
        }
@@ -114,7 +116,7 @@
                }
 
                if (!context.isPropertyResolved()) {
-                       DefaultResolver.setValue(context, base, property, 
value);
+                       getDefaultResolver().setValue(context, base, property, 
value);
                }
        }
 
@@ -129,18 +131,31 @@
                        return true;
                }
 
-               return DefaultResolver.isReadOnly(context, base, property);
+               return getDefaultResolver().isReadOnly(context, base, property);
        }
 
        public Iterator<java.beans.FeatureDescriptor> 
getFeatureDescriptors(ELContext context, Object base) {
-               return DefaultResolver.getFeatureDescriptors(context, base);
+               return getDefaultResolver().getFeatureDescriptors(context, 
base);
        }
 
        public Class<?> getCommonPropertyType(ELContext context, Object base) {
                if (base == null) {
                        return String.class;
                }
-               return DefaultResolver.getCommonPropertyType(context, base);
+               return getDefaultResolver().getCommonPropertyType(context, 
base);
        }
 
+       public static ELResolver getDefaultResolver() {
+           if (Globals.IS_SECURITY_ENABLED) {
+               ELResolver defaultResolver = new CompositeELResolver();
+               ((CompositeELResolver) defaultResolver).add(new 
MapELResolver());
+               ((CompositeELResolver) defaultResolver).add(new 
ResourceBundleELResolver());
+               ((CompositeELResolver) defaultResolver).add(new 
ListELResolver());
+               ((CompositeELResolver) defaultResolver).add(new 
ArrayELResolver());
+               ((CompositeELResolver) defaultResolver).add(new 
BeanELResolver());
+               return defaultResolver;
+           } else {
+               return DefaultResolver;
+           }
+       }
 }

Modified: tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java?rev=746425&r1=746424&r2=746425&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java Sat Feb 
21 00:44:33 2009
@@ -37,7 +37,8 @@
        public Expression parseExpression(String expression, Class expectedType,
                        FunctionMapper fMapper) throws ELException {
                try {
-                       ELContextImpl ctx = new 
ELContextImpl(ELResolverImpl.DefaultResolver);
+                       ELContextImpl ctx =
+                           new 
ELContextImpl(ELResolverImpl.getDefaultResolver());
             if (fMapper != null) {
                 ctx.setFunctionMapper(new FunctionMapperImpl(fMapper));
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to