changeset 1802:72ead60050ac

8180881: Better packaging of deserialization Reviewed-by: chegar, acorn
author robm
date Fri, 27 Oct 2017 20:38:49 +0100
parents 0ed664b26a02
children 7c5821691ba5
files make/java/java/mapfile-vers src/share/classes/java/io/ObjectInputStream.java src/share/classes/sun/misc/Launcher.java src/share/classes/sun/misc/VM.java src/share/classes/sun/rmi/server/MarshalInputStream.java src/share/native/sun/misc/VM.c
diffstat 6 files changed, 42 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/make/java/java/mapfile-vers	Tue Jan 16 13:27:03 2018 +0530
+++ b/make/java/java/mapfile-vers	Fri Oct 27 20:38:49 2017 +0100
@@ -92,7 +92,6 @@
 		Java_java_io_FileSystem_getFileSystem;
 		Java_java_io_ObjectInputStream_bytesToDoubles;
 		Java_java_io_ObjectInputStream_bytesToFloats;
-		Java_java_io_ObjectInputStream_latestUserDefinedLoader;
 		Java_java_io_ObjectOutputStream_doublesToBytes;
 		Java_java_io_ObjectOutputStream_floatsToBytes;
 		Java_java_io_ObjectStreamClass_hasStaticInitializer;
@@ -277,6 +276,7 @@
                 Java_sun_misc_Version_getJvmVersionInfo;
                 Java_sun_misc_Version_getJvmSpecialVersion;
                 Java_sun_misc_VM_getThreadStateValues;
+                Java_sun_misc_VM_latestUserDefinedLoader0;
                 Java_sun_misc_VM_initialize;
 		Java_sun_misc_VMSupport_initAgentProperties;
 
--- a/src/share/classes/java/io/ObjectInputStream.java	Tue Jan 16 13:27:03 2018 +0530
+++ b/src/share/classes/java/io/ObjectInputStream.java	Fri Oct 27 20:38:49 2017 +0100
@@ -2341,10 +2341,11 @@
                                               int ndoubles);
 
     /**
-     * Returns the first non-null class loader (not counting class loaders of
-     * generated reflection implementation classes) up the execution stack, or
-     * null if only code from the null class loader is on the stack.  This
-     * method is also called via reflection by the following RMI-IIOP class:
+     * Returns first non-privileged class loader on the stack (excluding
+     * reflection generated frames) or the extension class loader if only
+     * class loaded by the boot class loader and extension class loader are
+     * found on the stack. This method is also called via reflection by the
+     * following RMI-IIOP class:
      *
      *     com.sun.corba.se.internal.util.JDKClassLoader
      *
@@ -2352,7 +2353,9 @@
      * corresponding modifications to the above class.
      */
     // REMIND: change name to something more accurate?
-    private static native ClassLoader latestUserDefinedLoader();
+    private static ClassLoader latestUserDefinedLoader() {
+        return sun.misc.VM.latestUserDefinedLoader();
+    }
 
     /**
      * Default GetField implementation.
--- a/src/share/classes/sun/misc/Launcher.java	Tue Jan 16 13:27:03 2018 +0530
+++ b/src/share/classes/sun/misc/Launcher.java	Fri Oct 27 20:38:49 2017 +0100
@@ -129,8 +129,6 @@
          */
         public static ExtClassLoader getExtClassLoader() throws IOException
         {
-            final File[] dirs = getExtDirs();
-
             try {
                 // Prior implementations of this doPrivileged() block supplied
                 // aa synthesized ACC via a call to the private method
@@ -139,6 +137,7 @@
                 return AccessController.doPrivileged(
                     new PrivilegedExceptionAction<ExtClassLoader>() {
                         public ExtClassLoader run() throws IOException {
+                            final File[] dirs = getExtDirs();
                             int len = dirs.length;
                             for (int i = 0; i < len; i++) {
                                 MetaIndex.registerDirectory(dirs[i]);
--- a/src/share/classes/sun/misc/VM.java	Tue Jan 16 13:27:03 2018 +0530
+++ b/src/share/classes/sun/misc/VM.java	Fri Oct 27 20:38:49 2017 +0100
@@ -25,6 +25,7 @@
 
 package sun.misc;
 
+import java.io.IOException;
 import java.util.Properties;
 import java.util.HashMap;
 import java.util.Map;
@@ -386,6 +387,25 @@
     private native static void getThreadStateValues(int[][] vmThreadStateValues,
                                                     String[][] vmThreadStateNames);
 
+    /*
+     * Returns first non-privileged class loader on the stack (excluding
+     * reflection generated frames) or the extension class loader if only
+     * class loaded by the boot class loader and extension class loader are
+     * found on the stack.
+    */
+    public static native ClassLoader latestUserDefinedLoader0();
+    public static ClassLoader latestUserDefinedLoader() {
+        ClassLoader loader = latestUserDefinedLoader0();
+        if (loader != null) {
+            return loader;
+        }
+        try {
+            return Launcher.ExtClassLoader.getExtClassLoader();
+        } catch (IOException e) {
+            return null;
+        }
+    }
+
     static {
         initialize();
     }
--- a/src/share/classes/sun/rmi/server/MarshalInputStream.java	Tue Jan 16 13:27:03 2018 +0530
+++ b/src/share/classes/sun/rmi/server/MarshalInputStream.java	Fri Oct 27 20:38:49 2017 +0100
@@ -275,10 +275,14 @@
     }
 
     /*
-     * Returns the first non-null class loader up the execution stack, or null
-     * if only code from the null class loader is on the stack.
+     * Returns first non-privileged class loader on the stack (excluding
+     * reflection generated frames) or the extension class loader if only
+     * class loaded by the boot class loader and extension class loader are
+     * found on the stack.
      */
-    private static native ClassLoader latestUserDefinedLoader();
+    private static ClassLoader latestUserDefinedLoader() {
+        return sun.misc.VM.latestUserDefinedLoader();
+    }
 
     /**
      * Fix for 4179055: Need to assist resolving sun stubs; resolve
--- a/src/share/native/sun/misc/VM.c	Tue Jan 16 13:27:03 2018 +0530
+++ b/src/share/native/sun/misc/VM.c	Fri Oct 27 20:38:49 2017 +0100
@@ -109,6 +109,11 @@
     get_thread_state_info(env, JAVA_THREAD_STATE_TERMINATED, values, names);
 }
 
+JNIEXPORT jobject JNICALL
+Java_sun_misc_VM_latestUserDefinedLoader0(JNIEnv *env, jclass cls) {
+    return JVM_LatestUserDefinedLoader(env);
+}
+
 JNIEXPORT void JNICALL
 Java_sun_misc_VM_initialize(JNIEnv *env, jclass cls) {
     char errmsg[128];