# HG changeset patch # User robm # Date 1509133129 -3600 # Node ID 72ead60050ac9c220b386227e3b96e1dae4672c3 # Parent 0ed664b26a0227d4870926f1e24da99825c11b51 8180881: Better packaging of deserialization Reviewed-by: chegar, acorn diff -r 0ed664b26a02 -r 72ead60050ac make/java/java/mapfile-vers --- 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; diff -r 0ed664b26a02 -r 72ead60050ac src/share/classes/java/io/ObjectInputStream.java --- 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. diff -r 0ed664b26a02 -r 72ead60050ac src/share/classes/sun/misc/Launcher.java --- 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() { public ExtClassLoader run() throws IOException { + final File[] dirs = getExtDirs(); int len = dirs.length; for (int i = 0; i < len; i++) { MetaIndex.registerDirectory(dirs[i]); diff -r 0ed664b26a02 -r 72ead60050ac src/share/classes/sun/misc/VM.java --- 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(); } diff -r 0ed664b26a02 -r 72ead60050ac src/share/classes/sun/rmi/server/MarshalInputStream.java --- 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 diff -r 0ed664b26a02 -r 72ead60050ac src/share/native/sun/misc/VM.c --- 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];