Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X ad382abee -> 34ccb2465


Create GroovyClassLoader inside doPrivileged block

(cherry picked from commit 580cf39)


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

Branch: refs/heads/GROOVY_2_6_X
Commit: 4f9f919b444571c817094b3cd649c6c50fb342f7
Parents: ad382ab
Author: sunlan <[email protected]>
Authored: Mon Dec 4 15:57:33 2017 +0800
Committer: sunlan <[email protected]>
Committed: Mon Dec 4 16:05:02 2017 +0800

----------------------------------------------------------------------
 src/main/org/codehaus/groovy/control/Phases.java    |  2 +-
 .../org/codehaus/groovy/control/ProcessingUnit.java | 16 +++++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/4f9f919b/src/main/org/codehaus/groovy/control/Phases.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/control/Phases.java 
b/src/main/org/codehaus/groovy/control/Phases.java
index f43376d..47e421f 100644
--- a/src/main/org/codehaus/groovy/control/Phases.java
+++ b/src/main/org/codehaus/groovy/control/Phases.java
@@ -40,7 +40,7 @@ public class Phases
     public static final int FINALIZATION          = 9;   // Cleanup
     public static final int ALL                   = 9;   // Synonym for full 
compilation
     
-    public static String[] descriptions = {
+    public static final String[] descriptions = {
           "startup"
         , "initialization"
         , "parsing"

http://git-wip-us.apache.org/repos/asf/groovy/blob/4f9f919b/src/main/org/codehaus/groovy/control/ProcessingUnit.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/control/ProcessingUnit.java 
b/src/main/org/codehaus/groovy/control/ProcessingUnit.java
index 2861479..adc252d 100644
--- a/src/main/org/codehaus/groovy/control/ProcessingUnit.java
+++ b/src/main/org/codehaus/groovy/control/ProcessingUnit.java
@@ -20,6 +20,9 @@ package org.codehaus.groovy.control;
 
 import groovy.lang.GroovyClassLoader;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
 /**
  * A base class for data structures that can collect messages and errors
  * during processing.
@@ -99,9 +102,16 @@ public abstract class ProcessingUnit {
      */
 
     public void setClassLoader(GroovyClassLoader loader) {
-        ClassLoader parent = Thread.currentThread().getContextClassLoader();
-        if (parent == null) parent = ProcessingUnit.class.getClassLoader();
-        this.classLoader = (loader == null ? new GroovyClassLoader(parent, 
configuration) : loader);
+        // Classloaders should only be created inside doPrivileged block
+        // This code creates a classloader, which needs permission if a 
security manage is installed.
+        // If this code might be invoked by code that does not have security 
permissions, then the classloader creation needs to occur inside a doPrivileged 
block.
+        this.classLoader = (GroovyClassLoader) 
AccessController.doPrivileged(new PrivilegedAction() {
+            public Object run() {
+                ClassLoader parent = 
Thread.currentThread().getContextClassLoader();
+                if (parent == null) parent = 
ProcessingUnit.class.getClassLoader();
+                return loader == null ? new GroovyClassLoader(parent, 
configuration) : loader;
+            }
+        });
     }
 
 

Reply via email to