mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-15 20:11:01 +08:00
re PR libgcj/21785 (ClassNotFound during deserialization)
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. From-SVN: r100462
This commit is contained in:
parent
c3a29423de
commit
cd3352b625
@ -1,3 +1,15 @@
|
||||
2005-06-01 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
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 <tromey@redhat.com>
|
||||
|
||||
PR libgcj/21753:
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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 <java/lang/SecurityManager.h>
|
||||
#include <java/lang/reflect/Constructor.h>
|
||||
#include <java/lang/reflect/Method.h>
|
||||
#include <java-stack.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <java/lang/System.h>
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
21
libjava/testsuite/libjava.lang/pr21785.java
Normal file
21
libjava/testsuite/libjava.lang/pr21785.java
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
0
libjava/testsuite/libjava.lang/pr21785.out
Normal file
0
libjava/testsuite/libjava.lang/pr21785.out
Normal file
Loading…
Reference in New Issue
Block a user