From 0cd99be7377980b537d5b3a5c1b2903f6b114d9b Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Thu, 26 Apr 2001 02:02:05 +0000 Subject: re PR libgcj/2237 (serialization doesn't throw exception on failure) Fix PR libgcj/2237: * java/io/ObjectStreamClass.java (setClass): Calculate serialVersionUID for local class and compare it against the UID from the Object Stream. Throw InvalidClassException upon mismatch. (setUID): Renamed to... (getClassUID): this. Return the calculated class UID rather than setting uid field directly. (getDefinedSUID): Removed. * java/io/ObjectInputStream.java (resolveClass): Use the three-argument Class.forName(). * java/io/InvalidClassException (toString): Don't include classname in result if it is null. From-SVN: r41567 --- libjava/java/io/ObjectInputStream.java | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) (limited to 'libjava/java/io/ObjectInputStream.java') diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 028ed39..e607975 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -199,8 +199,8 @@ public class ObjectInputStream extends InputStream (class_name)); } - setBlockDataMode (true); - osc.setClass (resolveClass (osc)); + Class cl = resolveClass (osc); + osc.setClass (cl); setBlockDataMode (false); if (this.realInputStream.readByte () != TC_ENDBLOCKDATA) @@ -487,28 +487,16 @@ public class ObjectInputStream extends InputStream protected Class resolveClass (ObjectStreamClass osc) throws ClassNotFoundException, IOException { -// DEBUGln ("Resolving " + osc); - SecurityManager sm = System.getSecurityManager (); - if (sm == null) - sm = new SecurityManager () {}; - + // FIXME: currentClassLoader doesn't yet do anything useful. We need + // to call forName() with the classloader of the class which called + // readObject(). See SecurityManager.getClassContext(). ClassLoader cl = currentClassLoader (sm); - if (cl == null) - { -// DEBUGln ("No class loader found"); - return Class.forName (osc.getName ()); - } - else - { -// DEBUGln ("Using " + cl); - return cl.loadClass (osc.getName ()); - } + return Class.forName (osc.getName (), true, cl); } - /** Allows subclasses to resolve objects that are read from the stream with other objects to be returned in their place. This -- cgit v1.1