diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-04-26 02:02:05 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-04-26 02:02:05 +0000 |
commit | 1dea8d9d8bd52e2984b7ab28141b95cdb7ad1235 (patch) | |
tree | 6e9ae6e83b7184ea72086b949cfcbb9f8a4c3a3d /libjava/java/io/ObjectInputStream.java | |
parent | 9df0807c09bfcb7f21f4c30a95e7ca828b03c105 (diff) | |
download | gcc-1dea8d9d8bd52e2984b7ab28141b95cdb7ad1235.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41567 138bc75d-0d04-0410-961f-82ee72b054a4
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 028ed39d41e..e607975aacb 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 |