JDK-8158467 : AccessControlException is thrown on public Java class access if "script app loader" is set to null
  • Type: Bug
  • Component: core-libs
  • Sub-Component: jdk.nashorn
  • Affected Version: 9
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2016-06-02
  • Updated: 2016-10-13
  • Resolved: 2016-06-02
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u112Fixed 9 b122Fixed
Description
File: Main.java

import jdk.nashorn.api.scripting.*;
import javax.script.*;

public class Main {
  public static void main(String[] args) throws Exception {
     NashornScriptEngineFactory fac = new NashornScriptEngineFactory();
     // you null as ClassLoader for "app loader" for script engine.
     ScriptEngine e = fac.getScriptEngine((ClassLoader)null);
     // try to access public class from an exported package
     e.eval("java.lang.System");
  }
}

File: t.policy

grant {
   permission java.lang.RuntimePermission "nashorn.setConfig";
};

Compile and run the above program using jdk9 with these commands:

$ javac Main.java
$ java -Djava.security.manager -Djava.security.policy=t.policy Main

Exception in thread "main" java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
	at java.security.AccessControlContext.checkPermission(java.base@9-internal/AccessControlContext.java:468)
	at java.security.AccessController.checkPermission(java.base@9-internal/AccessController.java:894)
	at java.lang.SecurityManager.checkPermission(java.base@9-internal/SecurityManager.java:541)
	at java.lang.Class.forName(java.base@9-internal/Class.java:373)
	at jdk.nashorn.internal.runtime.Context.findClass(jdk.scripting.nashorn@9-internal/Context.java:1169)
	at jdk.nashorn.internal.runtime.NativeJavaPackage.createProperty(jdk.scripting.nashorn@9-internal/NativeJavaPackage.java:236)
	at jdk.nashorn.internal.runtime.NativeJavaPackage.noSuchProperty(jdk.scripting.nashorn@9-internal/NativeJavaPackage.java:205)
	at jdk.nashorn.internal.runtime.ScriptObject.findGetMethod(jdk.scripting.nashorn@9-internal/ScriptObject.java:1987)
	at jdk.nashorn.internal.runtime.ScriptObject.lookup(jdk.scripting.nashorn@9-internal/ScriptObject.java:1853)
	at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(jdk.scripting.nashorn@9-internal/NashornLinker.java:104)
	at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(jdk.scripting.nashorn@9-internal/NashornLinker.java:96)
	at jdk.dynalink.linker.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(jdk.dynalink@9-internal/CompositeTypeBasedGuardingDynamicLinker.java:184)
	at jdk.dynalink.linker.support.CompositeGuardingDynamicLinker.getGuardedInvocation(jdk.dynalink@9-internal/CompositeGuardingDynamicLinker.java:132)
	at jdk.dynalink.LinkerServicesImpl.lambda$getGuardedInvocation$0(jdk.dynalink@9-internal/LinkerServicesImpl.java:160)
	at jdk.dynalink.LinkerServicesImpl.getWithLookupInternal(jdk.dynalink@9-internal/LinkerServicesImpl.java:191)
	at jdk.dynalink.LinkerServicesImpl.getGuardedInvocation(jdk.dynalink@9-internal/LinkerServicesImpl.java:158)
	at jdk.dynalink.DynamicLinker.relink(jdk.dynalink@9-internal/DynamicLinker.java:265)
	at jdk.nashorn.internal.scripts.Script$Recompilation$1$\^eval\_.:program(jdk.scripting.nashorn.scripts/<eval>:1)
	at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(jdk.scripting.nashorn@9-internal/ScriptFunctionData.java:654)
	at jdk.nashorn.internal.runtime.ScriptFunction.invoke(jdk.scripting.nashorn@9-internal/ScriptFunction.java:513)
	at jdk.nashorn.internal.runtime.ScriptRuntime.apply(jdk.scripting.nashorn@9-internal/ScriptRuntime.java:489)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(jdk.scripting.nashorn@9-internal/NashornScriptEngine.java:445)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(jdk.scripting.nashorn@9-internal/NashornScriptEngine.java:402)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(jdk.scripting.nashorn@9-internal/NashornScriptEngine.java:398)
	at jdk.nashorn.api.scripting.NashornScriptEngine.eval(jdk.scripting.nashorn@9-internal/NashornScriptEngine.java:154)
	at javax.script.AbstractScriptEngine.eval(java.scripting@9-internal/AbstractScriptEngine.java:264)
	at Main.main(Main.java:8)