Merge

Fri, 14 Mar 2014 23:03:31 -0700

author
asaha
date
Fri, 14 Mar 2014 23:03:31 -0700
changeset 819
6b0503992896
parent 737
4268cd11c241
parent 818
e4fb85d69d6b
child 820
5793474768bd

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      }

mercurial