From 5c3bdf2ff4ad050d842ad73ffd0a679170cb0d62 Mon Sep 17 00:00:00 2001 From: tromey Date: Wed, 1 Jun 2005 19:58:25 +0000 Subject: [PATCH] PR libgcj/21785: * java/io/natObjectInputStream.cc (currentClassLoader): Removed. (currentLoader): New method. * java/io/ObjectInputStream.java (resolveProxyClass): Use currentLoader. (currentLoader): Now native. (currentClassLoader): Removed. * testsuite/libjava.lang/pr21785.java: New file. * testsuite/libjava.lang/pr21785.out: New file. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100462 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 12 ++++++++++ libjava/java/io/ObjectInputStream.java | 34 +++++------------------------ libjava/java/io/natObjectInputStream.cc | 13 ++++++----- libjava/testsuite/libjava.lang/pr21785.java | 21 ++++++++++++++++++ libjava/testsuite/libjava.lang/pr21785.out | 0 5 files changed, 46 insertions(+), 34 deletions(-) create mode 100644 libjava/testsuite/libjava.lang/pr21785.java create mode 100644 libjava/testsuite/libjava.lang/pr21785.out diff --git a/libjava/ChangeLog b/libjava/ChangeLog index cddaecbd1d9..a22d52061c0 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,17 @@ 2005-06-01 Tom Tromey + PR libgcj/21785: + * java/io/natObjectInputStream.cc (currentClassLoader): Removed. + (currentLoader): New method. + * java/io/ObjectInputStream.java (resolveProxyClass): Use + currentLoader. + (currentLoader): Now native. + (currentClassLoader): Removed. + * testsuite/libjava.lang/pr21785.java: New file. + * testsuite/libjava.lang/pr21785.out: New file. + +2005-06-01 Tom Tromey + PR libgcj/21753: * java/lang/natString.cc (substring): Changed sharing heuristic. diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 2cfe4c99419..0a97486d1bb 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -783,21 +783,11 @@ public class ObjectInputStream extends InputStream } /** - * This method invokes the method currentClassLoader for the - * current security manager (or build an empty one if it is not - * present). - * - * @return The most recent non-system ClassLoader on the execution stack. - * @see java.lang.SecurityManager#currentClassLoader() + * Returns he most recent user defined ClassLoader on the execution stack + * or null of none is found. */ - private ClassLoader currentLoader() - { - SecurityManager sm = System.getSecurityManager(); - if (sm == null) - sm = new SecurityManager () {}; - - return currentClassLoader(sm); - } + // GCJ LOCAL: native method. + private native ClassLoader currentLoader(); /** * Lookup a class stored in the local hashtable. If it is not @@ -883,12 +873,7 @@ public class ObjectInputStream extends InputStream protected Class resolveProxyClass(String[] intfs) throws IOException, ClassNotFoundException { - SecurityManager sm = System.getSecurityManager(); - - if (sm == null) - sm = new SecurityManager() {}; - - ClassLoader cl = currentClassLoader(sm); + ClassLoader cl = currentLoader(); Class[] clss = new Class[intfs.length]; if(cl == null) @@ -1866,15 +1851,6 @@ public class ObjectInputStream extends InputStream } } - /** - * This native method is used to get access to the protected method - * of the same name in SecurityManger. - * - * @param sm SecurityManager instance which should be called. - * @return The current class loader in the calling stack. - */ - private static native ClassLoader currentClassLoader (SecurityManager sm); - private void callReadMethod (Method readObject, Class klass, Object obj) throws ClassNotFoundException, IOException { diff --git a/libjava/java/io/natObjectInputStream.cc b/libjava/java/io/natObjectInputStream.cc index 0e0d5a719cc..2d1a55665d1 100644 --- a/libjava/java/io/natObjectInputStream.cc +++ b/libjava/java/io/natObjectInputStream.cc @@ -1,6 +1,6 @@ // natObjectInputStream.cc - Native part of ObjectInputStream class. -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation +/* Copyright (C) 1998, 1999, 2000, 2001, 2005 Free Software Foundation This ObjectInputStream is part of libgcj. @@ -24,6 +24,7 @@ details. */ #include #include #include +#include #ifdef DEBUG #include @@ -69,9 +70,11 @@ java::io::ObjectInputStream::allocateObject (jclass klass, jclass, return obj; } -java::lang::ClassLoader* -java::io::ObjectInputStream::currentClassLoader (::java::lang::SecurityManager *sm) +java::lang::ClassLoader * +java::io::ObjectInputStream::currentLoader () { - return sm->currentClassLoader (); + jclass caller = _Jv_StackTrace::GetCallingClass (&ObjectInputStream::class$); + if (caller) + return caller->getClassLoaderInternal(); + return NULL; } - diff --git a/libjava/testsuite/libjava.lang/pr21785.java b/libjava/testsuite/libjava.lang/pr21785.java new file mode 100644 index 00000000000..7869754977a --- /dev/null +++ b/libjava/testsuite/libjava.lang/pr21785.java @@ -0,0 +1,21 @@ +import java.io.*; + +public class pr21785 implements Serializable +{ + public static void main(String[] args) + { + try { + ByteArrayOutputStream outb = new ByteArrayOutputStream(); + ObjectOutputStream outs = new ObjectOutputStream(outb); + outs.writeObject(new pr21785()); + byte[] store = outb.toByteArray(); + + ByteArrayInputStream inb = new ByteArrayInputStream(store); + ObjectInputStream ins = new ObjectInputStream(inb); + ins.readObject(); + } + catch (Throwable e) { + throw new Error(e); + } + } +} diff --git a/libjava/testsuite/libjava.lang/pr21785.out b/libjava/testsuite/libjava.lang/pr21785.out new file mode 100644 index 00000000000..e69de29bb2d -- 2.11.0