Wed, 24 Jul 2013 20:28:03 +0530
8021262: Make nashorn access checks consistent with underlying dynalink
Reviewed-by: jlaskey, lagergren, attila
1.1 --- a/make/code_coverage.xml Wed Jul 24 08:25:04 2013 -0300 1.2 +++ b/make/code_coverage.xml Wed Jul 24 20:28:03 2013 +0530 1.3 @@ -132,7 +132,7 @@ 1.4 <arg value="-exclude"/> 1.5 <arg value="com\.oracle\.nashorn\.runtime\.ScriptRuntime*"/> 1.6 <arg value="-exclude"/> 1.7 - <arg value="jdk\.nashorn\.internal\.javaadapters*"/> 1.8 + <arg value="jdk\.nashorn\.javaadapters*"/> 1.9 <arg value="-exclude"/> 1.10 <arg value="jdk\.nashorn\.internal\.objects\.annotations*"/> 1.11 <arg value="-exclude"/>
2.1 --- a/src/jdk/nashorn/internal/codegen/SpillObjectCreator.java Wed Jul 24 08:25:04 2013 -0300 2.2 +++ b/src/jdk/nashorn/internal/codegen/SpillObjectCreator.java Wed Jul 24 20:28:03 2013 +0530 2.3 @@ -65,7 +65,7 @@ 2.4 2.5 final int length = keys.size(); 2.6 final Object[] presetValues = new Object[propertyMap.size()]; 2.7 - final Class clazz = JO.class; 2.8 + final Class<?> clazz = JO.class; 2.9 2.10 // Compute constant values 2.11 for (int i = 0; i < length; i++) {
3.1 --- a/src/jdk/nashorn/internal/objects/NativeDate.java Wed Jul 24 08:25:04 2013 -0300 3.2 +++ b/src/jdk/nashorn/internal/objects/NativeDate.java Wed Jul 24 20:28:03 2013 +0530 3.3 @@ -44,7 +44,6 @@ 3.4 import jdk.nashorn.internal.runtime.JSType; 3.5 import jdk.nashorn.internal.runtime.PropertyMap; 3.6 import jdk.nashorn.internal.runtime.ScriptEnvironment; 3.7 -import jdk.nashorn.internal.runtime.ScriptFunction; 3.8 import jdk.nashorn.internal.runtime.ScriptObject; 3.9 import jdk.nashorn.internal.runtime.ScriptRuntime; 3.10 import jdk.nashorn.internal.runtime.linker.Bootstrap;
4.1 --- a/src/jdk/nashorn/internal/objects/NativeObject.java Wed Jul 24 08:25:04 2013 -0300 4.2 +++ b/src/jdk/nashorn/internal/objects/NativeObject.java Wed Jul 24 20:28:03 2013 +0530 4.3 @@ -55,7 +55,6 @@ 4.4 import jdk.nashorn.internal.runtime.JSType; 4.5 import jdk.nashorn.internal.runtime.Property; 4.6 import jdk.nashorn.internal.runtime.PropertyMap; 4.7 -import jdk.nashorn.internal.runtime.ScriptFunction; 4.8 import jdk.nashorn.internal.runtime.ScriptObject; 4.9 import jdk.nashorn.internal.runtime.ScriptRuntime; 4.10 import jdk.nashorn.internal.runtime.linker.Bootstrap;
5.1 --- a/src/jdk/nashorn/internal/runtime/Context.java Wed Jul 24 08:25:04 2013 -0300 5.2 +++ b/src/jdk/nashorn/internal/runtime/Context.java Wed Jul 24 20:28:03 2013 +0530 5.3 @@ -40,10 +40,13 @@ 5.4 import java.util.concurrent.atomic.AtomicLong; 5.5 import java.net.MalformedURLException; 5.6 import java.net.URL; 5.7 +import java.security.AccessControlContext; 5.8 import java.security.AccessController; 5.9 import java.security.CodeSigner; 5.10 import java.security.CodeSource; 5.11 +import java.security.Permissions; 5.12 import java.security.PrivilegedAction; 5.13 +import java.security.ProtectionDomain; 5.14 import java.util.Map; 5.15 import jdk.internal.org.objectweb.asm.ClassReader; 5.16 import jdk.internal.org.objectweb.asm.util.CheckClassAdapter; 5.17 @@ -201,6 +204,7 @@ 5.18 5.19 private static final ClassLoader myLoader = Context.class.getClassLoader(); 5.20 private static final StructureLoader sharedLoader; 5.21 + private static final AccessControlContext NO_PERMISSIONS_CONTEXT; 5.22 5.23 static { 5.24 sharedLoader = AccessController.doPrivileged(new PrivilegedAction<StructureLoader>() { 5.25 @@ -209,6 +213,7 @@ 5.26 return new StructureLoader(myLoader, null); 5.27 } 5.28 }); 5.29 + NO_PERMISSIONS_CONTEXT = new AccessControlContext(new ProtectionDomain[] { new ProtectionDomain(null, new Permissions()) }); 5.30 } 5.31 5.32 /** 5.33 @@ -479,7 +484,7 @@ 5.34 source = new Source(name, script); 5.35 } 5.36 } else if (src instanceof Map) { 5.37 - final Map map = (Map)src; 5.38 + final Map<?,?> map = (Map<?,?>)src; 5.39 if (map.containsKey("script") && map.containsKey("name")) { 5.40 final String script = JSType.toString(map.get("script")); 5.41 final String name = JSType.toString(map.get("name")); 5.42 @@ -549,11 +554,14 @@ 5.43 * @throws ClassNotFoundException if structure class cannot be resolved 5.44 */ 5.45 public static Class<?> forStructureClass(final String fullName) throws ClassNotFoundException { 5.46 + if (System.getSecurityManager() != null && !NashornLoader.isStructureClass(fullName)) { 5.47 + throw new ClassNotFoundException(fullName); 5.48 + } 5.49 return Class.forName(fullName, true, sharedLoader); 5.50 } 5.51 5.52 /** 5.53 - * Checks that the given package can be accessed from current call stack. 5.54 + * Checks that the given package can be accessed from no permissions context. 5.55 * 5.56 * @param fullName fully qualified package name 5.57 * @throw SecurityException if not accessible 5.58 @@ -563,13 +571,19 @@ 5.59 if (index != -1) { 5.60 final SecurityManager sm = System.getSecurityManager(); 5.61 if (sm != null) { 5.62 - sm.checkPackageAccess(fullName.substring(0, index)); 5.63 + AccessController.doPrivileged(new PrivilegedAction<Void>() { 5.64 + @Override 5.65 + public Void run() { 5.66 + sm.checkPackageAccess(fullName.substring(0, index)); 5.67 + return null; 5.68 + } 5.69 + }, NO_PERMISSIONS_CONTEXT); 5.70 } 5.71 } 5.72 } 5.73 5.74 /** 5.75 - * Checks that the given package can be accessed from current call stack. 5.76 + * Checks that the given package can be accessed from no permissions context. 5.77 * 5.78 * @param fullName fully qualified package name 5.79 * @return true if package is accessible, false otherwise 5.80 @@ -584,7 +598,7 @@ 5.81 } 5.82 5.83 /** 5.84 - * Checks that the given Class can be accessed from current call stack and is public. 5.85 + * Checks that the given Class is public and it can be accessed from no permissions context. 5.86 * 5.87 * @param clazz Class object to check 5.88 * @return true if Class is accessible, false otherwise
6.1 --- a/src/jdk/nashorn/internal/runtime/NashornLoader.java Wed Jul 24 08:25:04 2013 -0300 6.2 +++ b/src/jdk/nashorn/internal/runtime/NashornLoader.java Wed Jul 24 20:28:03 2013 +0530 6.3 @@ -118,6 +118,10 @@ 6.4 return permCollection; 6.5 } 6.6 6.7 + static boolean isStructureClass(final String fullName) { 6.8 + return fullName.startsWith(SCRIPTS_PKG); 6.9 + } 6.10 + 6.11 /** 6.12 * Create a secure URL class loader for the given classpath 6.13 * @param classPath classpath for the loader to search from
7.1 --- a/src/jdk/nashorn/internal/runtime/PropertyMap.java Wed Jul 24 08:25:04 2013 -0300 7.2 +++ b/src/jdk/nashorn/internal/runtime/PropertyMap.java Wed Jul 24 20:28:03 2013 +0530 7.3 @@ -352,11 +352,15 @@ 7.4 return newMap; 7.5 } 7.6 7.7 - /* 7.8 + /** 7.9 * Make a new UserAccessorProperty property. getter and setter functions are stored in 7.10 * this ScriptObject and slot values are used in property object. Note that slots 7.11 * are assigned speculatively and should be added to map before adding other 7.12 * properties. 7.13 + * 7.14 + * @param key the property name 7.15 + * @param propertyFlags attribute flags of the property 7.16 + * @return the newly created UserAccessorProperty 7.17 */ 7.18 public UserAccessorProperty newUserAccessors(final String key, final int propertyFlags) { 7.19 int oldSpillLength = spillLength;
8.1 --- a/src/jdk/nashorn/internal/runtime/ScriptObject.java Wed Jul 24 08:25:04 2013 -0300 8.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptObject.java Wed Jul 24 20:28:03 2013 +0530 8.3 @@ -3192,9 +3192,15 @@ 8.4 return true; 8.5 } 8.6 8.7 - /* 8.8 + /** 8.9 * Make a new UserAccessorProperty property. getter and setter functions are stored in 8.10 * this ScriptObject and slot values are used in property object. 8.11 + * 8.12 + * @param key the property name 8.13 + * @param propertyFlags attribute flags of the property 8.14 + * @param getter getter function for the property 8.15 + * @param setter setter function for the property 8.16 + * @return the newly created UserAccessorProperty 8.17 */ 8.18 protected final UserAccessorProperty newUserAccessors(final String key, final int propertyFlags, final ScriptFunction getter, final ScriptFunction setter) { 8.19 final UserAccessorProperty property = getMap().newUserAccessors(key, propertyFlags);
9.1 --- a/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Wed Jul 24 08:25:04 2013 -0300 9.2 +++ b/src/jdk/nashorn/internal/runtime/ScriptRuntime.java Wed Jul 24 20:28:03 2013 +0530 9.3 @@ -391,7 +391,7 @@ 9.4 return construct(target, args); 9.5 } 9.6 9.7 - /* 9.8 + /** 9.9 * Call a script function as a constructor with given args. 9.10 * 9.11 * @param target ScriptFunction object.
10.1 --- a/src/jdk/nashorn/internal/runtime/Source.java Wed Jul 24 08:25:04 2013 -0300 10.2 +++ b/src/jdk/nashorn/internal/runtime/Source.java Wed Jul 24 20:28:03 2013 +0530 10.3 @@ -384,11 +384,7 @@ 10.4 } 10.5 10.6 final byte[] buf = Files.readAllBytes(file.toPath()); 10.7 - if (cs != null) { 10.8 - return new String(buf, cs).toCharArray(); 10.9 - } else { 10.10 - return byteToCharArray(buf); 10.11 - } 10.12 + return (cs != null)? new String(buf, cs).toCharArray() : byteToCharArray(buf); 10.13 } 10.14 10.15 /** 10.16 @@ -465,11 +461,7 @@ 10.17 } 10.18 10.19 private static char[] readFully(final InputStream is, final Charset cs) throws IOException { 10.20 - if (cs != null) { 10.21 - return new String(readBytes(is), cs).toCharArray(); 10.22 - } else { 10.23 - return readFully(is); 10.24 - } 10.25 + return (cs != null)? new String(readBytes(is), cs).toCharArray() : readFully(is); 10.26 } 10.27 10.28 private static char[] readFully(final InputStream is) throws IOException {
11.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Wed Jul 24 08:25:04 2013 -0300 11.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Wed Jul 24 20:28:03 2013 +0530 11.3 @@ -51,7 +51,6 @@ 11.4 import java.lang.reflect.Modifier; 11.5 import java.security.AccessController; 11.6 import java.security.PrivilegedAction; 11.7 -import java.security.SecureRandom; 11.8 import java.util.Arrays; 11.9 import java.util.Collection; 11.10 import java.util.HashSet; 11.11 @@ -179,8 +178,6 @@ 11.12 */ 11.13 private static final Collection<MethodInfo> EXCLUDED = getExcludedMethods(); 11.14 11.15 - private static final Random random = new SecureRandom(); 11.16 - 11.17 // This is the superclass for our generated adapter. 11.18 private final Class<?> superClass; 11.19 // Class loader used as the parent for the class loader we'll create to load the generated class. It will be a class 11.20 @@ -230,12 +227,6 @@ 11.21 superClassName = Type.getInternalName(superClass); 11.22 generatedClassName = getGeneratedClassName(superClass, interfaces); 11.23 11.24 - // Randomize the name of the privileged global setter, to make it non-feasible to find. 11.25 - final long l; 11.26 - synchronized(random) { 11.27 - l = random.nextLong(); 11.28 - } 11.29 - 11.30 cw.visit(Opcodes.V1_7, ACC_PUBLIC | ACC_SUPER | ACC_FINAL, generatedClassName, null, superClassName, getInternalTypeNames(interfaces)); 11.31 11.32 generateGlobalFields();
12.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java Wed Jul 24 08:25:04 2013 -0300 12.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java Wed Jul 24 20:28:03 2013 +0530 12.3 @@ -73,16 +73,6 @@ 12.4 }); 12.5 } 12.6 12.7 - private static class AdapterLoader extends SecureClassLoader { 12.8 - AdapterLoader(ClassLoader parent) { 12.9 - super(parent); 12.10 - } 12.11 - } 12.12 - 12.13 - static boolean isAdapterClass(Class<?> clazz) { 12.14 - return clazz.getClassLoader() instanceof AdapterLoader; 12.15 - } 12.16 - 12.17 // Note that the adapter class is created in the protection domain of the class/interface being 12.18 // extended/implemented, and only the privileged global setter action class is generated in the protection domain 12.19 // of Nashorn itself. Also note that the creation and loading of the global setter is deferred until it is 12.20 @@ -91,7 +81,7 @@ 12.21 // with ability to introspect on the class and use setAccessible(true) on it could invoke the method. It's a 12.22 // security tradeoff... 12.23 private ClassLoader createClassLoader(final ClassLoader parentLoader) { 12.24 - return new AdapterLoader(parentLoader) { 12.25 + return new SecureClassLoader(parentLoader) { 12.26 private final ClassLoader myLoader = getClass().getClassLoader(); 12.27 12.28 @Override
13.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java Wed Jul 24 08:25:04 2013 -0300 13.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java Wed Jul 24 20:28:03 2013 +0530 13.3 @@ -138,15 +138,6 @@ 13.4 } 13.5 13.6 /** 13.7 - * Tells if the given Class is an adapter or support class 13.8 - * @param clazz Class object 13.9 - * @return true if the Class given is adapter or support class 13.10 - */ 13.11 - public static boolean isAdapterClass(Class<?> clazz) { 13.12 - return JavaAdapterClassLoader.isAdapterClass(clazz); 13.13 - } 13.14 - 13.15 - /** 13.16 * Returns whether an instance of the specified class/interface can be generated from a ScriptFunction. Returns true 13.17 * iff: the adapter for the class/interface can be created, it is abstract (this includes interfaces), it has at 13.18 * least one abstract method, all the abstract methods share the same name, and it has a public or protected default
14.1 --- a/src/jdk/nashorn/internal/runtime/linker/LinkerCallSite.java Wed Jul 24 08:25:04 2013 -0300 14.2 +++ b/src/jdk/nashorn/internal/runtime/linker/LinkerCallSite.java Wed Jul 24 20:28:03 2013 +0530 14.3 @@ -477,6 +477,7 @@ 14.4 /** 14.5 * Tracer function that logs a callsite miss 14.6 * 14.7 + * @param desc callsite descriptor string 14.8 * @param args arguments to function 14.9 * 14.10 * @throws Throwable if invocation failes or throws exception/error
15.1 --- a/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java Wed Jul 24 08:25:04 2013 -0300 15.2 +++ b/src/jdk/nashorn/internal/runtime/linker/NashornBottomLinker.java Wed Jul 24 20:28:03 2013 +0530 15.3 @@ -169,31 +169,43 @@ 15.4 return ScriptRuntime.safeToString(linkRequest.getArguments()[1]); 15.5 } 15.6 15.7 - // Returns @FunctionalInterface annotated interface's single abstract method. 15.8 - // If not found, returns null 15.9 - static Method getFunctionalInterfaceMethod(final Class<?> clazz) { 15.10 - if (clazz == null) { 15.11 - return null; 15.12 + // cache of @FunctionalInterface method of implementor classes 15.13 + private static final ClassValue<Method> FUNCTIONAL_IFACE_METHOD = new ClassValue<Method>() { 15.14 + @Override 15.15 + protected Method computeValue(final Class<?> type) { 15.16 + return findFunctionalInterfaceMethod(type); 15.17 } 15.18 15.19 - for (Class<?> iface : clazz.getInterfaces()) { 15.20 - // check accessiblity up-front 15.21 - if (! Context.isAccessibleClass(iface)) { 15.22 - continue; 15.23 + private Method findFunctionalInterfaceMethod(final Class<?> clazz) { 15.24 + if (clazz == null) { 15.25 + return null; 15.26 } 15.27 15.28 - // check for @FunctionalInterface 15.29 - if (iface.isAnnotationPresent(FunctionalInterface.class)) { 15.30 - // return the first abstract method 15.31 - for (final Method m : iface.getMethods()) { 15.32 - if (Modifier.isAbstract(m.getModifiers())) { 15.33 - return m; 15.34 + for (Class<?> iface : clazz.getInterfaces()) { 15.35 + // check accessiblity up-front 15.36 + if (! Context.isAccessibleClass(iface)) { 15.37 + continue; 15.38 + } 15.39 + 15.40 + // check for @FunctionalInterface 15.41 + if (iface.isAnnotationPresent(FunctionalInterface.class)) { 15.42 + // return the first abstract method 15.43 + for (final Method m : iface.getMethods()) { 15.44 + if (Modifier.isAbstract(m.getModifiers())) { 15.45 + return m; 15.46 + } 15.47 } 15.48 } 15.49 } 15.50 + 15.51 + // did not find here, try super class 15.52 + return findFunctionalInterfaceMethod(clazz.getSuperclass()); 15.53 } 15.54 + }; 15.55 15.56 - // did not find here, try super class 15.57 - return getFunctionalInterfaceMethod(clazz.getSuperclass()); 15.58 + // Returns @FunctionalInterface annotated interface's single abstract 15.59 + // method. If not found, returns null. 15.60 + static Method getFunctionalInterfaceMethod(final Class<?> clazz) { 15.61 + return FUNCTIONAL_IFACE_METHOD.get(clazz); 15.62 } 15.63 }
16.1 --- a/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java Wed Jul 24 08:25:04 2013 -0300 16.2 +++ b/src/jdk/nashorn/internal/runtime/linker/NashornStaticClassLinker.java Wed Jul 24 20:28:03 2013 +0530 16.3 @@ -34,6 +34,7 @@ 16.4 import jdk.internal.dynalink.linker.LinkerServices; 16.5 import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; 16.6 import jdk.internal.dynalink.support.Guards; 16.7 +import jdk.nashorn.internal.runtime.Context; 16.8 import jdk.nashorn.internal.runtime.ECMAErrors; 16.9 16.10 /** 16.11 @@ -68,6 +69,9 @@ 16.12 final CallSiteDescriptor desc = request.getCallSiteDescriptor(); 16.13 // We intercept "new" on StaticClass instances to provide additional capabilities 16.14 if ("new".equals(desc.getNameToken(CallSiteDescriptor.OPERATOR))) { 16.15 + // make sure new is on accessible Class 16.16 + Context.checkPackageAccess(receiverClass.getName()); 16.17 + 16.18 // Is the class abstract? (This includes interfaces.) 16.19 if (NashornLinker.isAbstractClass(receiverClass)) { 16.20 // Change this link request into a link request on the adapter class.
17.1 --- a/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java Wed Jul 24 08:25:04 2013 -0300 17.2 +++ b/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java Wed Jul 24 20:28:03 2013 +0530 17.3 @@ -76,9 +76,10 @@ 17.4 final CallSiteDescriptor desc = requestWithoutContext.getCallSiteDescriptor(); 17.5 if(CallSiteDescriptorFactory.tokenizeOperators(desc).contains("getProp")) { 17.6 if ("static".equals(desc.getNameToken(CallSiteDescriptor.NAME_OPERAND))) { 17.7 - Context.checkPackageAccess(((Class)self).getName()); 17.8 - // If "getProp:static" passes package access, allow access. 17.9 - return; 17.10 + if (Context.isAccessibleClass((Class<?>)self) && !isReflectionClass((Class<?>)self)) { 17.11 + // If "getProp:static" passes access checks, allow access. 17.12 + return; 17.13 + } 17.14 } 17.15 } 17.16 }
18.1 --- a/test/script/sandbox/nashorninternals.js Wed Jul 24 08:25:04 2013 -0300 18.2 +++ b/test/script/sandbox/nashorninternals.js Wed Jul 24 20:28:03 2013 +0530 18.3 @@ -44,17 +44,25 @@ 18.4 18.5 // Not exhaustive - but a representative list of classes 18.6 checkClass("jdk.nashorn.internal.codegen.Compiler"); 18.7 -checkClass("jdk.nashorn.internal.codegen.objects.MapCreator"); 18.8 checkClass("jdk.nashorn.internal.codegen.types.Type"); 18.9 checkClass("jdk.nashorn.internal.ir.Node"); 18.10 checkClass("jdk.nashorn.internal.ir.FunctionNode"); 18.11 checkClass("jdk.nashorn.internal.ir.debug.JSONWriter"); 18.12 checkClass("jdk.nashorn.internal.ir.visitor.NodeVisitor"); 18.13 +checkClass("jdk.nashorn.internal.lookup.MethodHandleFactory"); 18.14 +checkClass("jdk.nashorn.internal.objects.Global"); 18.15 checkClass("jdk.nashorn.internal.parser.AbstractParser"); 18.16 checkClass("jdk.nashorn.internal.parser.Parser"); 18.17 checkClass("jdk.nashorn.internal.parser.JSONParser"); 18.18 checkClass("jdk.nashorn.internal.parser.Lexer"); 18.19 checkClass("jdk.nashorn.internal.parser.Scanner"); 18.20 +checkClass("jdk.nashorn.internal.runtime.Context"); 18.21 +checkClass("jdk.nashorn.internal.runtime.arrays.ArrayData"); 18.22 +checkClass("jdk.nashorn.internal.runtime.linker.Bootstrap"); 18.23 +checkClass("jdk.nashorn.internal.runtime.options.Option"); 18.24 +checkClass("jdk.nashorn.internal.runtime.regexp.RegExp"); 18.25 +checkClass("jdk.nashorn.internal.scripts.JO"); 18.26 +checkClass("jdk.nashorn.tools.Shell"); 18.27 checkClass("jdk.internal.dynalink.CallSiteDescriptor"); 18.28 checkClass("jdk.internal.dynalink.beans.StaticClass"); 18.29 checkClass("jdk.internal.dynalink.linker.LinkRequest");
19.1 --- a/test/script/trusted/JDK-8006529.js Wed Jul 24 08:25:04 2013 -0300 19.2 +++ b/test/script/trusted/JDK-8006529.js Wed Jul 24 20:28:03 2013 +0530 19.3 @@ -39,20 +39,21 @@ 19.4 * and FunctionNode because of package-access check and so reflective calls. 19.5 */ 19.6 19.7 -var Parser = Java.type("jdk.nashorn.internal.parser.Parser") 19.8 -var Compiler = Java.type("jdk.nashorn.internal.codegen.Compiler") 19.9 -var Context = Java.type("jdk.nashorn.internal.runtime.Context") 19.10 -var ScriptEnvironment = Java.type("jdk.nashorn.internal.runtime.ScriptEnvironment") 19.11 -var Source = Java.type("jdk.nashorn.internal.runtime.Source") 19.12 -var FunctionNode = Java.type("jdk.nashorn.internal.ir.FunctionNode") 19.13 -var Block = Java.type("jdk.nashorn.internal.ir.Block") 19.14 -var VarNode = Java.type("jdk.nashorn.internal.ir.VarNode") 19.15 -var ExpressionStatement = Java.type("jdk.nashorn.internal.ir.ExpressionStatement") 19.16 -var UnaryNode = Java.type("jdk.nashorn.internal.ir.UnaryNode") 19.17 -var BinaryNode = Java.type("jdk.nashorn.internal.ir.BinaryNode") 19.18 -var ThrowErrorManager = Java.type("jdk.nashorn.internal.runtime.Context$ThrowErrorManager") 19.19 -var ErrorManager = Java.type("jdk.nashorn.internal.runtime.ErrorManager") 19.20 -var Debug = Java.type("jdk.nashorn.internal.runtime.Debug") 19.21 +var forName = java.lang.Class["forName(String)"]; 19.22 +var Parser = forName("jdk.nashorn.internal.parser.Parser").static 19.23 +var Compiler = forName("jdk.nashorn.internal.codegen.Compiler").static 19.24 +var Context = forName("jdk.nashorn.internal.runtime.Context").static 19.25 +var ScriptEnvironment = forName("jdk.nashorn.internal.runtime.ScriptEnvironment").static 19.26 +var Source = forName("jdk.nashorn.internal.runtime.Source").static 19.27 +var FunctionNode = forName("jdk.nashorn.internal.ir.FunctionNode").static 19.28 +var Block = forName("jdk.nashorn.internal.ir.Block").static 19.29 +var VarNode = forName("jdk.nashorn.internal.ir.VarNode").static 19.30 +var ExpressionStatement = forName("jdk.nashorn.internal.ir.ExpressionStatement").static 19.31 +var UnaryNode = forName("jdk.nashorn.internal.ir.UnaryNode").static 19.32 +var BinaryNode = forName("jdk.nashorn.internal.ir.BinaryNode").static 19.33 +var ThrowErrorManager = forName("jdk.nashorn.internal.runtime.Context$ThrowErrorManager").static 19.34 +var ErrorManager = forName("jdk.nashorn.internal.runtime.ErrorManager").static 19.35 +var Debug = forName("jdk.nashorn.internal.runtime.Debug").static 19.36 19.37 var parseMethod = Parser.class.getMethod("parse"); 19.38 var compileMethod = Compiler.class.getMethod("compile", FunctionNode.class);
20.1 --- a/test/script/trusted/JDK-8021129.js Wed Jul 24 08:25:04 2013 -0300 20.2 +++ b/test/script/trusted/JDK-8021129.js Wed Jul 24 20:28:03 2013 +0530 20.3 @@ -29,9 +29,9 @@ 20.4 * @test 20.5 * @run 20.6 */ 20.7 -var R = Java.type("jdk.nashorn.internal.test.models.InternalRunnable") 20.8 -var r1 = R.class.newInstance() 20.9 20.10 +var InternalRunnableSuperclass = Java.type("jdk.nashorn.test.models.InternalRunnableSuperclass"); 20.11 +var r1 = InternalRunnableSuperclass.makeInternalRunnable(); 20.12 r1.run() // Can execute method from an implemented non-restricted interface 20.13 print(r1.toString()) // Can execute public method from a superclass 20.14 20.15 @@ -41,5 +41,5 @@ 20.16 print(r1.canSeeThisField === undefined) // Can't see fields from superclasses 20.17 print(r1.canNotSeeThisField === undefined) // Can't see its own fields 20.18 20.19 -var r2 = new (Java.type("jdk.nashorn.test.models.InternalRunnableSuperclass")) 20.20 +var r2 = new InternalRunnableSuperclass(); 20.21 print(r2.canSeeThisField) // Superclass field works fine on its own
21.1 --- a/test/script/trusted/JDK-8021189.js Wed Jul 24 08:25:04 2013 -0300 21.2 +++ b/test/script/trusted/JDK-8021189.js Wed Jul 24 20:28:03 2013 +0530 21.3 @@ -27,8 +27,9 @@ 21.4 * @test 21.5 * @run 21.6 */ 21.7 +var InternalRunnableSuperclass = Java.type("jdk.nashorn.test.models.InternalRunnableSuperclass"); 21.8 try { 21.9 - new (Java.type("jdk.nashorn.internal.test.models.InternalRunnable")) 21.10 + new (InternalRunnableSuperclass.getInternalRunnableType())(); 21.11 } catch(e) { 21.12 print(e) 21.13 }
22.1 --- a/test/script/trusted/JDK-8021189.js.EXPECTED Wed Jul 24 08:25:04 2013 -0300 22.2 +++ b/test/script/trusted/JDK-8021189.js.EXPECTED Wed Jul 24 20:28:03 2013 +0530 22.3 @@ -1,1 +1,1 @@ 22.4 -TypeError: Can not construct jdk.nashorn.internal.test.models.InternalRunnable with the passed arguments; they do not match any of its constructor signatures. 22.5 +java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessClassInPackage.jdk.nashorn.internal.test.models")
23.1 --- a/test/src/jdk/nashorn/test/models/InternalRunnableSuperclass.java Wed Jul 24 08:25:04 2013 -0300 23.2 +++ b/test/src/jdk/nashorn/test/models/InternalRunnableSuperclass.java Wed Jul 24 20:28:03 2013 +0530 23.3 @@ -25,6 +25,9 @@ 23.4 23.5 package jdk.nashorn.test.models; 23.6 23.7 +import jdk.internal.dynalink.beans.StaticClass; 23.8 +import jdk.nashorn.internal.test.models.InternalRunnable; 23.9 + 23.10 /** 23.11 * Acts as a non-restricted superclass for a restricted class. 23.12 * 23.13 @@ -32,4 +35,11 @@ 23.14 public class InternalRunnableSuperclass { 23.15 public final int canSeeThisField = 19; 23.16 23.17 + public static Object makeInternalRunnable() { 23.18 + return new InternalRunnable(); 23.19 + } 23.20 + 23.21 + public static StaticClass getInternalRunnableType() { 23.22 + return StaticClass.forClass(InternalRunnable.class); 23.23 + } 23.24 }