Author: markt
Date: Sun Apr 11 22:43:09 2010
New Revision: 933007

URL: http://svn.apache.org/viewvc?rev=933007&view=rev
Log:
TCK failures: EL TCK with security manager

Modified:
    tomcat/trunk/java/javax/el/ExpressionFactory.java
    tomcat/trunk/java/org/apache/el/parser/AstValue.java

Modified: tomcat/trunk/java/javax/el/ExpressionFactory.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ExpressionFactory.java?rev=933007&r1=933006&r2=933007&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/ExpressionFactory.java (original)
+++ tomcat/trunk/java/javax/el/ExpressionFactory.java Sun Apr 11 22:43:09 2010
@@ -27,6 +27,8 @@ import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Properties;
 
 /**
@@ -34,15 +36,46 @@ import java.util.Properties;
  * @since 2.1
  */
 public abstract class ExpressionFactory {
+    
+    private static final boolean IS_SECURITY_ENABLED =
+        (System.getSecurityManager() != null);
 
     private static final String SERVICE_RESOURCE_NAME =
         "META-INF/services/javax.el.ExpressionFactory";
 
-    private static final String SEP = System.getProperty("file.separator");
-    private static final String PROPERTY_FILE =
-        System.getProperty("java.home") + "lib" + SEP + "el.properties";
     private static final String PROPERTY_NAME = "javax.el.ExpressionFactory";
 
+    private static final String SEP;
+    private static final String PROPERTY_FILE;
+
+    static {
+        if (IS_SECURITY_ENABLED) {
+            SEP = AccessController.doPrivileged(
+                    new PrivilegedAction<String>(){
+                        @Override
+                        public String run() {
+                            return System.getProperty("file.separator");
+                        }
+
+                    }
+            );
+            PROPERTY_FILE = AccessController.doPrivileged(
+                    new PrivilegedAction<String>(){
+                        @Override
+                        public String run() {
+                            return System.getProperty("java.home") + "lib" +
+                                    SEP + "el.properties";
+                        }
+
+                    }
+            );
+        } else {
+            SEP = System.getProperty("file.separator");
+            PROPERTY_FILE = System.getProperty("java.home") + "lib" + SEP +
+                    "el.properties";
+        }
+    }
+
     public abstract Object coerceToType(Object obj, Class<?> expectedType)
             throws ELException;
 
@@ -90,12 +123,34 @@ public abstract class ExpressionFactory 
         // First services API
         className = getClassNameServices(tccl);
         if (className == null) {
-            // Second el.properties file
-            className = getClassNameJreDir();
+            if (IS_SECURITY_ENABLED) {
+                className = AccessController.doPrivileged(
+                        new PrivilegedAction<String>() {
+                            @Override
+                            public String run() {
+                                return getClassNameJreDir();
+                            }
+                        }
+                );
+            } else {
+                // Second el.properties file
+                className = getClassNameJreDir();
+            }
         }
         if (className == null) {
-            // Third system property 
-            className = getClassNameSysProp();
+            if (IS_SECURITY_ENABLED) {
+                className = AccessController.doPrivileged(
+                        new PrivilegedAction<String>() {
+                            @Override
+                            public String run() {
+                                return getClassNameSysProp();
+                            }
+                        }
+                );
+            } else {
+                // Third system property 
+                className = getClassNameSysProp();
+            }
         }
         if (className == null) {
             // Fourth - default
@@ -225,4 +280,5 @@ public abstract class ExpressionFactory 
         }
         return null;
     }
+
 }

Modified: tomcat/trunk/java/org/apache/el/parser/AstValue.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstValue.java?rev=933007&r1=933006&r2=933007&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstValue.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstValue.java Sun Apr 11 22:43:09 
2010
@@ -20,6 +20,8 @@ package org.apache.el.parser;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 import javax.el.ELException;
 import javax.el.ELResolver;
@@ -39,10 +41,31 @@ import org.apache.el.util.ReflectionUtil
  */
 public final class AstValue extends SimpleNode {
 
-    protected static final boolean COERCE_TO_ZERO =
-        Boolean.valueOf(System.getProperty(
-                "org.apache.el.parser.COERCE_TO_ZERO", "true")).booleanValue();
+    private static final boolean IS_SECURITY_ENABLED =
+        (System.getSecurityManager() != null);
+
+    protected static final boolean COERCE_TO_ZERO;
     
+    static {
+        if (IS_SECURITY_ENABLED) {
+            COERCE_TO_ZERO = AccessController.doPrivileged(
+                    new PrivilegedAction<Boolean>(){
+                        @Override
+                        public Boolean run() {
+                            return Boolean.valueOf(System.getProperty(
+                                    "org.apache.el.parser.COERCE_TO_ZERO",
+                                    "true"));
+                        }
+
+                    }
+            ).booleanValue();
+        } else {
+            COERCE_TO_ZERO = Boolean.valueOf(System.getProperty(
+                    "org.apache.el.parser.COERCE_TO_ZERO",
+                    "true")).booleanValue();
+        }
+    }
+
     protected static class Target {
         protected Object base;
 



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

Reply via email to