]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ObjectInputStream.java (readClassDescriptor): Avoid the overflow of fieldmapping.
authorIto Kazumitsu <kaz@maczuka.gcd.org>
Sun, 15 Feb 2004 11:53:45 +0000 (11:53 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Sun, 15 Feb 2004 11:53:45 +0000 (11:53 +0000)
2004-02-15  Ito Kazumitsu  <kaz@maczuka.gcd.org>

* java/io/ObjectInputStream.java (readClassDescriptor): Avoid the
        overflow of fieldmapping.

From-SVN: r77843

libjava/ChangeLog
libjava/java/io/ObjectInputStream.java

index 56030dd857631a4ff2cc9f3f6ff5fe7c5f0b9936..e3239f837ad9377345cf80b99ea8f9a9c6be3509 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-15  Ito Kazumitsu  <kaz@maczuka.gcd.org>
+
+       * java/io/ObjectInputStream.java (readClassDescriptor): Avoid the
+        overflow of fieldmapping.
+
 2004-02-14  Sascha Brawer  <brawer@dandelis.ch>
 
        * javax/swing/undo/UndoManager.java: Re-written from scratch.
index e471b6d7d59b4cdef22bd54f8ce27bf8c16188d7..ce2d0ca90e26f10bc0e882413b11a4d620ab0a4e 100644 (file)
@@ -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;
   }