summaryrefslogtreecommitdiff
path: root/libjava/java/io/ObjectInputStream.java
diff options
context:
space:
mode:
authormark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-16 16:30:03 +0000
committermark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>2005-11-16 16:30:03 +0000
commit9ba35eac69022998573b5e2b21022708fd9a0f11 (patch)
tree0fda62a6586bb15fee6065d0863f3e58790cd0b5 /libjava/java/io/ObjectInputStream.java
parent25e54dbac3e7c96f3c8b6c1f09c387ec0030976f (diff)
downloadgcc-9ba35eac69022998573b5e2b21022708fd9a0f11.tar.gz
2005-11-15 Jeroen Frijters <jeroen@frijters.net>
* java/io/ObjectInputStream.java (parseContent): Removed bogus println and fixed bug #24422. 2005-11-15 Mark Wielaard <mark@klomp.org> * java/io/ObjectStreamClass.java: Removed, fully merged now. * sources.am: Regenerated. * Makefile.in: Regenerated. 2005-11-15 Wolfgang Baer <WBaer@gmx.de> * java/io/ObjectInputStream.java (processResolution): Pass Error, RuntimeException and ObjectStreamException through to the caller. (readObject): Documentation update. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107088 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/io/ObjectInputStream.java')
-rw-r--r--libjava/java/io/ObjectInputStream.java30
1 files changed, 27 insertions, 3 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index 47fd0789306..54661a9bc53 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -113,7 +113,10 @@ public class ObjectInputStream extends InputStream
* <code>private void readObject (ObjectInputStream)</code>.
*
* If an exception is thrown from this method, the stream is left in
- * an undefined state.
+ * an undefined state. This method can also throw Errors and
+ * RuntimeExceptions if caused by existing readResolve() user code.
+ *
+ * @return The object read from the underlying stream.
*
* @exception ClassNotFoundException The class that an object being
* read in belongs to cannot be found.
@@ -199,7 +202,6 @@ public class ObjectInputStream extends InputStream
for (int i = 0; i < n_intf; i++)
{
intfs[i] = this.realInputStream.readUTF();
- System.out.println(intfs[i]);
}
boolean oldmode = setBlockDataMode(true);
@@ -207,6 +209,21 @@ public class ObjectInputStream extends InputStream
setBlockDataMode(oldmode);
ObjectStreamClass osc = lookupClass(cl);
+ if (osc.firstNonSerializableParentConstructor == null)
+ {
+ osc.realClassIsSerializable = true;
+ osc.fields = osc.fieldMapping = new ObjectStreamField[0];
+ try
+ {
+ osc.firstNonSerializableParentConstructor =
+ Object.class.getConstructor(new Class[0]);
+ }
+ catch (NoSuchMethodException x)
+ {
+ throw (InternalError)
+ new InternalError("Object ctor missing").initCause(x);
+ }
+ }
assignNewHandle(osc);
if (!is_consumed)
@@ -1558,8 +1575,15 @@ public class ObjectInputStream extends InputStream
catch (IllegalAccessException ignore)
{
}
- catch (InvocationTargetException ignore)
+ catch (InvocationTargetException exception)
{
+ Throwable cause = exception.getCause();
+ if (cause instanceof ObjectStreamException)
+ throw (ObjectStreamException) cause;
+ else if (cause instanceof RuntimeException)
+ throw (RuntimeException) cause;
+ else if (cause instanceof Error)
+ throw (Error) cause;
}
}