summaryrefslogtreecommitdiffstats
path: root/libjava/java/io
diff options
context:
space:
mode:
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-15 11:53:45 +0000
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-15 11:53:45 +0000
commit3eeae8c088b1c937a1cb03ae52abd7bdeb83956d (patch)
treec660e6ecd4e14c53bd2fac8a47a6a82302bd1dbe /libjava/java/io
parent98842c42db6308a6e872ba030a98afaa66a04f9c (diff)
downloadppe42-gcc-3eeae8c088b1c937a1cb03ae52abd7bdeb83956d.tar.gz
ppe42-gcc-3eeae8c088b1c937a1cb03ae52abd7bdeb83956d.zip
2004-02-15 Ito Kazumitsu <kaz@maczuka.gcd.org>
* java/io/ObjectInputStream.java (readClassDescriptor): Avoid the overflow of fieldmapping. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77843 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/io')
-rw-r--r--libjava/java/io/ObjectInputStream.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index e471b6d7d59..ce2d0ca90e2 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -1,5 +1,6 @@
/* ObjectInputStream.java -- Class used to read serialized objects
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -491,7 +492,6 @@ public class ObjectInputStream extends InputStream
ObjectStreamField[] stream_fields = osc.fields;
ObjectStreamField[] real_fields = ObjectStreamClass.lookup(clazz).fields;
ObjectStreamField[] fieldmapping = new ObjectStreamField[2 * Math.max(stream_fields.length, real_fields.length)];
- osc.fieldMapping = fieldmapping;
int stream_idx = 0;
int real_idx = 0;
@@ -543,9 +543,21 @@ public class ObjectInputStream extends InputStream
}
if (real_field != null && !real_field.isToSet())
real_field = null;
+ /* If some of stream_fields does not correspond to any of real_fields,
+ * or the opposite, then fieldmapping will go short.
+ */
+ if (map_idx == fieldmapping.length)
+ {
+ ObjectStreamField[] newfieldmapping =
+ new ObjectStreamField[fieldmapping.length + 2];
+ System.arraycopy(fieldmapping, 0,
+ newfieldmapping, 0, fieldmapping.length);
+ fieldmapping = newfieldmapping;
+ }
fieldmapping[map_idx++] = stream_field;
fieldmapping[map_idx++] = real_field;
}
+ osc.fieldMapping = fieldmapping;
return osc;
}
OpenPOWER on IntegriCloud