You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/12/04 12:05:24 UTC

groovy git commit: Create classloader inside doPrivileged block

Repository: groovy
Updated Branches:
  refs/heads/master 690d1e487 -> 3aa0b7e33


Create classloader inside doPrivileged block


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3aa0b7e3
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3aa0b7e3
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3aa0b7e3

Branch: refs/heads/master
Commit: 3aa0b7e33903bc3694a6ddbf1c69eccc91e35c81
Parents: 690d1e4
Author: sunlan <su...@apache.org>
Authored: Mon Dec 4 20:04:40 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Dec 4 20:04:40 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/util/GroovyScriptEngine.java    | 25 +++++++++++---------
 .../codehaus/groovy/reflection/ClassInfo.java   |  8 ++++++-
 .../codehaus/groovy/tools/GroovyStarter.java    | 10 ++++++--
 3 files changed, 29 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/3aa0b7e3/src/main/groovy/util/GroovyScriptEngine.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/util/GroovyScriptEngine.java b/src/main/groovy/util/GroovyScriptEngine.java
index aecb27a..7b5ad50 100644
--- a/src/main/groovy/util/GroovyScriptEngine.java
+++ b/src/main/groovy/util/GroovyScriptEngine.java
@@ -69,9 +69,12 @@ import java.util.concurrent.ConcurrentHashMap;
  * @author Mattias Reichel
  */
 public class GroovyScriptEngine implements ResourceConnector {
+    private static final ClassLoader CL_STUB = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+        public ClassLoader run() {
+            return new ClassLoader() {};
+        }
+    });
 
-    private static final ClassLoader CL_STUB = new ClassLoader() {
-    };
     private static final URL[] EMPTY_URL_ARRAY = new URL[0];
 
     private static class LocalData {
@@ -366,15 +369,15 @@ public class GroovyScriptEngine implements ResourceConnector {
      */
     private GroovyClassLoader initGroovyLoader() {
         GroovyClassLoader groovyClassLoader =
-            (GroovyClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                if (parentLoader instanceof GroovyClassLoader) {
-                    return new ScriptClassLoader((GroovyClassLoader) parentLoader);
-                } else {
-                    return new ScriptClassLoader(parentLoader, config);
-                }
-            }
-        });
+                AccessController.doPrivileged(new PrivilegedAction<ScriptClassLoader>() {
+                    public ScriptClassLoader run() {
+                        if (parentLoader instanceof GroovyClassLoader) {
+                            return new ScriptClassLoader((GroovyClassLoader) parentLoader);
+                        } else {
+                            return new ScriptClassLoader(parentLoader, config);
+                        }
+                    }
+                });
         for (URL root : roots) groovyClassLoader.addURL(root);
         return groovyClassLoader;
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/3aa0b7e3/src/main/org/codehaus/groovy/reflection/ClassInfo.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/reflection/ClassInfo.java b/src/main/org/codehaus/groovy/reflection/ClassInfo.java
index 49c5743..b4dc133 100644
--- a/src/main/org/codehaus/groovy/reflection/ClassInfo.java
+++ b/src/main/org/codehaus/groovy/reflection/ClassInfo.java
@@ -54,6 +54,8 @@ import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import java.lang.ref.WeakReference;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -460,7 +462,11 @@ public class ClassInfo implements Finalizable {
         }
 
         public ClassLoaderForClassArtifacts initValue() {
-            return new ClassLoaderForClassArtifacts(info.classRef.get());
+            return AccessController.doPrivileged(new PrivilegedAction<ClassLoaderForClassArtifacts>() {
+                public ClassLoaderForClassArtifacts run() {
+                    return new ClassLoaderForClassArtifacts(info.classRef.get());
+                }
+            });
         }
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/3aa0b7e3/src/main/org/codehaus/groovy/tools/GroovyStarter.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/tools/GroovyStarter.java b/src/main/org/codehaus/groovy/tools/GroovyStarter.java
index a8164db..d4799f4 100644
--- a/src/main/org/codehaus/groovy/tools/GroovyStarter.java
+++ b/src/main/org/codehaus/groovy/tools/GroovyStarter.java
@@ -21,6 +21,8 @@ package org.codehaus.groovy.tools;
 import java.io.FileInputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
  * Helper class to initialize the Groovy runtime.
@@ -35,7 +37,7 @@ public class GroovyStarter {
     
     public static void rootLoader(String args[]) {
         String conf = System.getProperty("groovy.starter.conf",null);
-        LoaderConfiguration lc = new LoaderConfiguration();
+        final LoaderConfiguration lc = new LoaderConfiguration();
         
         // evaluate parameters
         boolean hadMain=false, hadConf=false, hadCP=false;
@@ -92,7 +94,11 @@ public class GroovyStarter {
             }
         }
         // create loader and execute main class
-        ClassLoader loader = new RootLoader(lc);
+        ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction<RootLoader>() {
+            public RootLoader run() {
+                return new RootLoader(lc);
+            }
+        });
         Method m=null;
         try {
             Class c = loader.loadClass(lc.getMainClass());