Fri, 14 Mar 2014 23:03:31 -0700
Merge
.hgtags | file | annotate | diff | comparison | revisions |
1.1 --- a/.hgtags Wed Mar 12 14:12:13 2014 -0700 1.2 +++ b/.hgtags Fri Mar 14 23:03:31 2014 -0700 1.3 @@ -241,6 +241,22 @@ 1.4 fdfbb745caf0e54775a44e66e39d3025785e0528 jdk8-b127 1.5 73cbad0c5d28b8f6e12f634aceeb2b3b4ad09553 jdk8-b128 1.6 9cc3fd32fbabdd8b06771d11a319c9802e118612 jdk8-b129 1.7 +f87eba70e9ee96255137c389db7cb4e2480e53e7 jdk8-b130 1.8 +cca9748cfec7025ac0ddcdede9e5724fa676ad13 jdk8-b131 1.9 +5dbdae28a6f3dae3913b118c128bcb1f803317ac jdk8-b132 1.10 +13ca8f1a9eba716295fb7d9c2ddad81390931919 jdk8u5-b01 1.11 +7e7cb9977a3d1244384ffa454a4890764a07b042 jdk8u5-b02 1.12 +2abeb654b57f306f73f3f73bdfa05f93bce2a1f3 jdk8u5-b03 1.13 +7c650ceee4902249f32bdc066926b77291007859 jdk8u5-b04 1.14 +d88b60cdc8f3cfceb8ef19b095769015b441e37f jdk8u11-b00 1.15 +d88b60cdc8f3cfceb8ef19b095769015b441e37f jdk8u5-b05 1.16 +d6dfad8b7fb524780ebf4f6b62284cf5679f9ba8 jdk8u5-b06 1.17 +96ad962a6a88874830e99e0cd11aece89a1bd1f4 jdk8u5-b07 1.18 +f0b7b8b5e29a3a4e481fbeb9b346552c9819675e jdk8u5-b08 1.19 +6ca65190effb3bf8119bb4e93f1692487337ec72 jdk8u5-b09 1.20 +8bc83045abc547edb7cfb7d688d84164f0b11cea jdk8u5-b10 1.21 +bc23b19e08eb1575663044902b6442ceaafa924f jdk8u5-b11 1.22 +18b007062905dac9304605955a4b84eaf2a08553 jdk8u5-b12 1.23 43a1183d2ab0ee3dbffd8bc47606e88dbe0c6116 jdk8u20-b02 1.24 9d69311869d513deecfebe767cc5f01502c9c01e jdk8u20-b03 1.25 e70dd55986e085185d976f2a78843a7d7eb87afd jdk8u20-b04
2.1 --- a/THIRD_PARTY_README Wed Mar 12 14:12:13 2014 -0700 2.2 +++ b/THIRD_PARTY_README Fri Mar 14 23:03:31 2014 -0700 2.3 @@ -1399,13 +1399,13 @@ 2.4 2.5 ------------------------------------------------------------------------------- 2.6 2.7 -%% This notice is provided with respect to Little CMS 2.4, which may be 2.8 +%% This notice is provided with respect to Little CMS 2.5, which may be 2.9 included with JRE 8, JDK 8, and OpenJDK 8. 2.10 2.11 --- begin of LICENSE --- 2.12 2.13 Little CMS 2.14 -Copyright (c) 1998-2010 Marti Maria Saguer 2.15 +Copyright (c) 1998-2011 Marti Maria Saguer 2.16 2.17 Permission is hereby granted, free of charge, to any person obtaining a copy 2.18 of this software and associated documentation files (the "Software"), to deal
3.1 --- a/src/jdk/internal/dynalink/beans/AccessibleMembersLookup.java Wed Mar 12 14:12:13 2014 -0700 3.2 +++ b/src/jdk/internal/dynalink/beans/AccessibleMembersLookup.java Fri Mar 14 23:03:31 2014 -0700 3.3 @@ -211,7 +211,8 @@ 3.4 if(!CheckRestrictedPackage.isRestrictedClass(clazz)) { 3.5 searchSuperTypes = false; 3.6 for(Method method: clazz.getMethods()) { 3.7 - if(instance != Modifier.isStatic(method.getModifiers())) { 3.8 + final boolean isStatic = Modifier.isStatic(method.getModifiers()); 3.9 + if(instance != isStatic) { 3.10 final MethodSignature sig = new MethodSignature(method); 3.11 if(!methods.containsKey(sig)) { 3.12 final Class<?> declaringClass = method.getDeclaringClass(); 3.13 @@ -228,7 +229,10 @@ 3.14 //generate the said synthetic delegators. 3.15 searchSuperTypes = true; 3.16 } else { 3.17 - methods.put(sig, method); 3.18 + // don't allow inherited static 3.19 + if (!isStatic || clazz == declaringClass) { 3.20 + methods.put(sig, method); 3.21 + } 3.22 } 3.23 } 3.24 } 3.25 @@ -245,7 +249,8 @@ 3.26 searchSuperTypes = true; 3.27 } 3.28 3.29 - if(searchSuperTypes) { 3.30 + // don't need to search super types for static methods 3.31 + if(instance && searchSuperTypes) { 3.32 // If we reach here, the class is either not public, or it is in a restricted package. Alternatively, it is 3.33 // public, but some of its methods claim that their declaring class is non-public. We'll try superclasses 3.34 // and implemented interfaces then looking for public ones.
4.1 --- a/src/jdk/internal/dynalink/beans/FacetIntrospector.java Wed Mar 12 14:12:13 2014 -0700 4.2 +++ b/src/jdk/internal/dynalink/beans/FacetIntrospector.java Fri Mar 14 23:03:31 2014 -0700 4.3 @@ -136,7 +136,13 @@ 4.4 final Field[] fields = clazz.getFields(); 4.5 final Collection<Field> cfields = new ArrayList<>(fields.length); 4.6 for(Field field: fields) { 4.7 - if(instance != Modifier.isStatic(field.getModifiers()) && isAccessible(field)) { 4.8 + final boolean isStatic = Modifier.isStatic(field.getModifiers()); 4.9 + if(isStatic && clazz != field.getDeclaringClass()) { 4.10 + // ignore inherited static fields 4.11 + continue; 4.12 + } 4.13 + 4.14 + if(instance != isStatic && isAccessible(field)) { 4.15 cfields.add(field); 4.16 } 4.17 }
5.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Wed Mar 12 14:12:13 2014 -0700 5.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterBytecodeGenerator.java Fri Mar 14 23:03:31 2014 -0700 5.3 @@ -131,20 +131,17 @@ 5.4 * implemented securely. 5.5 */ 5.6 final class JavaAdapterBytecodeGenerator { 5.7 - static final Type CONTEXT_TYPE = Type.getType(Context.class); 5.8 static final Type OBJECT_TYPE = Type.getType(Object.class); 5.9 - static final Type SCRIPT_OBJECT_TYPE = Type.getType(ScriptObject.class); 5.10 5.11 - static final String CONTEXT_TYPE_NAME = CONTEXT_TYPE.getInternalName(); 5.12 static final String OBJECT_TYPE_NAME = OBJECT_TYPE.getInternalName(); 5.13 5.14 static final String INIT = "<init>"; 5.15 5.16 static final String GLOBAL_FIELD_NAME = "global"; 5.17 5.18 - static final String SCRIPT_OBJECT_TYPE_DESCRIPTOR = SCRIPT_OBJECT_TYPE.getDescriptor(); 5.19 + static final String GLOBAL_TYPE_DESCRIPTOR = OBJECT_TYPE.getDescriptor(); 5.20 5.21 - static final String SET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, SCRIPT_OBJECT_TYPE); 5.22 + static final String SET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE); 5.23 static final String VOID_NOARG_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE); 5.24 5.25 private static final Type SCRIPT_FUNCTION_TYPE = Type.getType(ScriptFunction.class); 5.26 @@ -155,7 +152,7 @@ 5.27 OBJECT_TYPE, STRING_TYPE, METHOD_TYPE_TYPE); 5.28 private static final String GET_HANDLE_FUNCTION_DESCRIPTOR = Type.getMethodDescriptor(METHOD_HANDLE_TYPE, 5.29 SCRIPT_FUNCTION_TYPE, METHOD_TYPE_TYPE); 5.30 - private static final String GET_CLASS_INITIALIZER_DESCRIPTOR = Type.getMethodDescriptor(SCRIPT_OBJECT_TYPE); 5.31 + private static final String GET_CLASS_INITIALIZER_DESCRIPTOR = Type.getMethodDescriptor(OBJECT_TYPE); 5.32 private static final Type RUNTIME_EXCEPTION_TYPE = Type.getType(RuntimeException.class); 5.33 private static final Type THROWABLE_TYPE = Type.getType(Throwable.class); 5.34 private static final Type UNSUPPORTED_OPERATION_TYPE = Type.getType(UnsupportedOperationException.class); 5.35 @@ -167,7 +164,7 @@ 5.36 private static final String UNSUPPORTED_OPERATION_TYPE_NAME = UNSUPPORTED_OPERATION_TYPE.getInternalName(); 5.37 5.38 private static final String METHOD_HANDLE_TYPE_DESCRIPTOR = METHOD_HANDLE_TYPE.getDescriptor(); 5.39 - private static final String GET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(SCRIPT_OBJECT_TYPE); 5.40 + private static final String GET_GLOBAL_METHOD_DESCRIPTOR = Type.getMethodDescriptor(OBJECT_TYPE); 5.41 private static final String GET_CLASS_METHOD_DESCRIPTOR = Type.getMethodDescriptor(Type.getType(Class.class)); 5.42 5.43 // Package used when the adapter can't be defined in the adaptee's package (either because it's sealed, or because 5.44 @@ -259,7 +256,7 @@ 5.45 } 5.46 5.47 private void generateGlobalFields() { 5.48 - cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, null).visitEnd(); 5.49 + cw.visitField(ACC_PRIVATE | ACC_FINAL | (classOverride ? ACC_STATIC : 0), GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR, null, null).visitEnd(); 5.50 usedFieldNames.add(GLOBAL_FIELD_NAME); 5.51 } 5.52 5.53 @@ -363,7 +360,7 @@ 5.54 } 5.55 // Assign "global = Context.getGlobal()" 5.56 invokeGetGlobalWithNullCheck(mv); 5.57 - mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); 5.58 + mv.putstatic(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR); 5.59 5.60 endInitMethod(mv); 5.61 } 5.62 @@ -508,7 +505,7 @@ 5.63 // Assign "this.global = Context.getGlobal()" 5.64 mv.visitVarInsn(ALOAD, 0); 5.65 invokeGetGlobalWithNullCheck(mv); 5.66 - mv.putfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); 5.67 + mv.putfield(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR); 5.68 5.69 endInitMethod(mv); 5.70 } 5.71 @@ -524,11 +521,11 @@ 5.72 } 5.73 5.74 private static void invokeGetGlobal(final InstructionAdapter mv) { 5.75 - mv.invokestatic(CONTEXT_TYPE_NAME, "getGlobal", GET_GLOBAL_METHOD_DESCRIPTOR); 5.76 + mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "getGlobal", GET_GLOBAL_METHOD_DESCRIPTOR); 5.77 } 5.78 5.79 private static void invokeSetGlobal(final InstructionAdapter mv) { 5.80 - mv.invokestatic(CONTEXT_TYPE_NAME, "setGlobal", SET_GLOBAL_METHOD_DESCRIPTOR); 5.81 + mv.invokestatic(SERVICES_CLASS_TYPE_NAME, "setGlobal", SET_GLOBAL_METHOD_DESCRIPTOR); 5.82 } 5.83 5.84 /** 5.85 @@ -652,10 +649,10 @@ 5.86 // Load the creatingGlobal object 5.87 if(classOverride) { 5.88 // If class handle is defined, load the static defining global 5.89 - mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); 5.90 + mv.getstatic(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR); 5.91 } else { 5.92 mv.visitVarInsn(ALOAD, 0); 5.93 - mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, SCRIPT_OBJECT_TYPE_DESCRIPTOR); 5.94 + mv.getfield(generatedClassName, GLOBAL_FIELD_NAME, GLOBAL_TYPE_DESCRIPTOR); 5.95 } 5.96 // stack: [creatingGlobal, handle] 5.97 final Label setupGlobal = new Label(); 5.98 @@ -744,7 +741,7 @@ 5.99 final Label methodEnd = new Label(); 5.100 mv.visitLabel(methodEnd); 5.101 5.102 - mv.visitLocalVariable("currentGlobal", SCRIPT_OBJECT_TYPE_DESCRIPTOR, null, setupGlobal, methodEnd, currentGlobalVar); 5.103 + mv.visitLocalVariable("currentGlobal", GLOBAL_TYPE_DESCRIPTOR, null, setupGlobal, methodEnd, currentGlobalVar); 5.104 mv.visitLocalVariable("globalsDiffer", Type.INT_TYPE.getDescriptor(), null, setupGlobal, methodEnd, globalsDifferVar); 5.105 5.106 if(throwableDeclared) {
6.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java Wed Mar 12 14:12:13 2014 -0700 6.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterClassLoader.java Fri Mar 14 23:03:31 2014 -0700 6.3 @@ -31,6 +31,8 @@ 6.4 import java.security.ProtectionDomain; 6.5 import java.security.SecureClassLoader; 6.6 import jdk.internal.dynalink.beans.StaticClass; 6.7 +import jdk.nashorn.internal.runtime.Context; 6.8 +import jdk.nashorn.internal.runtime.ScriptFunction; 6.9 6.10 /** 6.11 * This class encapsulates the bytecode of the adapter class and can be used to load it into the JVM as an actual Class. 6.12 @@ -85,13 +87,14 @@ 6.13 @Override 6.14 public Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException { 6.15 try { 6.16 + Context.checkPackageAccess(name); 6.17 return super.loadClass(name, resolve); 6.18 } catch (final SecurityException se) { 6.19 // we may be implementing an interface or extending a class that was 6.20 // loaded by a loader that prevents package.access. If so, it'd throw 6.21 // SecurityException for nashorn's classes!. For adapter's to work, we 6.22 - // should be able to refer to nashorn classes. 6.23 - if (name.startsWith("jdk.nashorn.internal.")) { 6.24 + // should be able to refer to the few classes it needs in its implementation. 6.25 + if(ScriptFunction.class.getName().equals(name) || JavaAdapterServices.class.getName().equals(name)) { 6.26 return myLoader.loadClass(name); 6.27 } 6.28 throw se;
7.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java Wed Mar 12 14:12:13 2014 -0700 7.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java Fri Mar 14 23:03:31 2014 -0700 7.3 @@ -248,7 +248,7 @@ 7.4 } 7.5 7.6 private static class AdapterInfo { 7.7 - private static final ClassAndLoader SCRIPT_OBJECT_LOADER = new ClassAndLoader(ScriptObject.class, true); 7.8 + private static final ClassAndLoader SCRIPT_OBJECT_LOADER = new ClassAndLoader(ScriptFunction.class, true); 7.9 7.10 private final ClassLoader commonLoader; 7.11 // TODO: soft reference the JavaAdapterClassLoader objects. They can be recreated when needed.
8.1 --- a/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java Wed Mar 12 14:12:13 2014 -0700 8.2 +++ b/src/jdk/nashorn/internal/runtime/linker/JavaAdapterServices.java Fri Mar 14 23:03:31 2014 -0700 8.3 @@ -116,8 +116,8 @@ 8.4 * static initializers. 8.5 * @return the thread-local JS object used to define methods for the class being initialized. 8.6 */ 8.7 - public static ScriptObject getClassOverrides() { 8.8 - final ScriptObject overrides = classOverrides.get(); 8.9 + public static Object getClassOverrides() { 8.10 + final Object overrides = classOverrides.get(); 8.11 assert overrides != null; 8.12 return overrides; 8.13 } 8.14 @@ -134,6 +134,22 @@ 8.15 NO_PERMISSIONS_INVOKER.invokeExact(method, arg); 8.16 } 8.17 8.18 + /** 8.19 + * Set the current global scope 8.20 + * @param global the global scope 8.21 + */ 8.22 + public static void setGlobal(final Object global) { 8.23 + Context.setGlobal((ScriptObject)global); 8.24 + } 8.25 + 8.26 + /** 8.27 + * Get the current global scope 8.28 + * @return the current global scope 8.29 + */ 8.30 + public static Object getGlobal() { 8.31 + return Context.getGlobal(); 8.32 + } 8.33 + 8.34 static void setClassOverrides(ScriptObject overrides) { 8.35 classOverrides.set(overrides); 8.36 }
9.1 --- a/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java Wed Mar 12 14:12:13 2014 -0700 9.2 +++ b/src/jdk/nashorn/internal/runtime/linker/ReflectionCheckLinker.java Fri Mar 14 23:03:31 2014 -0700 9.3 @@ -39,16 +39,38 @@ 9.4 * Check java reflection permission for java reflective and java.lang.invoke access from scripts 9.5 */ 9.6 final class ReflectionCheckLinker implements TypeBasedGuardingDynamicLinker{ 9.7 + private static final Class<?> STATEMENT_CLASS = getBeanClass("Statement"); 9.8 + private static final Class<?> XMLENCODER_CLASS = getBeanClass("XMLEncoder"); 9.9 + private static final Class<?> XMLDECODER_CLASS = getBeanClass("XMLDecoder"); 9.10 + 9.11 + private static Class<?> getBeanClass(final String name) { 9.12 + try { 9.13 + return Class.forName("java.beans." + name); 9.14 + } catch (final ClassNotFoundException cnfe) { 9.15 + // Possible to miss this class in other profiles. 9.16 + return null; 9.17 + } 9.18 + } 9.19 + 9.20 @Override 9.21 public boolean canLinkType(final Class<?> type) { 9.22 return isReflectionClass(type); 9.23 } 9.24 9.25 private static boolean isReflectionClass(final Class<?> type) { 9.26 + // Class or ClassLoader subclasses 9.27 if (type == Class.class || ClassLoader.class.isAssignableFrom(type)) { 9.28 return true; 9.29 } 9.30 9.31 + // check for bean reflection 9.32 + if ((STATEMENT_CLASS != null && STATEMENT_CLASS.isAssignableFrom(type)) || 9.33 + (XMLENCODER_CLASS != null && XMLENCODER_CLASS.isAssignableFrom(type)) || 9.34 + (XMLDECODER_CLASS != null && XMLDECODER_CLASS.isAssignableFrom(type))) { 9.35 + return true; 9.36 + } 9.37 + 9.38 + // package name check 9.39 final String name = type.getName(); 9.40 return name.startsWith("java.lang.reflect.") || name.startsWith("java.lang.invoke."); 9.41 }