diff options
author | Bryce McKinlay <bryce@waitaki.otago.ac.nz> | 2001-04-26 02:02:05 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2001-04-26 03:02:05 +0100 |
commit | 0cd99be7377980b537d5b3a5c1b2903f6b114d9b (patch) | |
tree | 6e9ae6e83b7184ea72086b949cfcbb9f8a4c3a3d /libjava/java/io/ObjectInputStream.java | |
parent | 7b518b39532eb29e51d8e1a81794ed1c59fdff86 (diff) | |
download | gcc-0cd99be7377980b537d5b3a5c1b2903f6b114d9b.zip gcc-0cd99be7377980b537d5b3a5c1b2903f6b114d9b.tar.gz gcc-0cd99be7377980b537d5b3a5c1b2903f6b114d9b.tar.bz2 |
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
Diffstat (limited to 'libjava/java/io/ObjectInputStream.java')
-rw-r--r-- | libjava/java/io/ObjectInputStream.java | 24 |
1 files changed, 6 insertions, 18 deletions
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 |