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; + } + }); }
