From: Ito Kazumitsu Date: Sun, 15 Feb 2004 11:53:45 +0000 (+0000) Subject: ObjectInputStream.java (readClassDescriptor): Avoid the overflow of fieldmapping. X-Git-Tag: releases/gcc-4.0.0~10106 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af1967542f8f4607594bc6494014a8b01bd94b9f;p=thirdparty%2Fgcc.git ObjectInputStream.java (readClassDescriptor): Avoid the overflow of fieldmapping. 2004-02-15 Ito Kazumitsu * java/io/ObjectInputStream.java (readClassDescriptor): Avoid the overflow of fieldmapping. From-SVN: r77843 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 56030dd85763..e3239f837ad9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2004-02-15 Ito Kazumitsu + + * java/io/ObjectInputStream.java (readClassDescriptor): Avoid the + overflow of fieldmapping. + 2004-02-14 Sascha Brawer * javax/swing/undo/UndoManager.java: Re-written from scratch. diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index e471b6d7d59b..ce2d0ca90e26 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; }