summaryrefslogtreecommitdiff
path: root/java/io/ObjectStreamClass.java
diff options
context:
space:
mode:
authorGuilhem Lavaux <guilhem@kaffe.org>2004-02-26 07:53:15 +0000
committerGuilhem Lavaux <guilhem@kaffe.org>2004-02-26 07:53:15 +0000
commit2eabe6e28fc1df9b1f8ee2409c68329ce4d1c386 (patch)
tree0e9073aa4efabb6e537505a7c576806182ee3bb4 /java/io/ObjectStreamClass.java
parent890ad45c658cb00eeba7ab8fe5daed32f7a41936 (diff)
downloadclasspath-2eabe6e28fc1df9b1f8ee2409c68329ce4d1c386.tar.gz
* java/io/ObjectInputStream.java
(readClassDescriptor): Keep elements of the mapping non null. (checkTypeConsistency): New method. (readFields): Fixed main loop and base logic. Small reindentation. * java/io/ObjectStreamField.java (lookupField): New method to update the field reference. (checkFieldType): New method. * java/io/ObjectStreamClass.java (setClass, setFields): Call lookupField when building the field database. Check the real field type.
Diffstat (limited to 'java/io/ObjectStreamClass.java')
-rw-r--r--java/io/ObjectStreamClass.java34
1 files changed, 32 insertions, 2 deletions
diff --git a/java/io/ObjectStreamClass.java b/java/io/ObjectStreamClass.java
index 429db187b..d080f280b 100644
--- a/java/io/ObjectStreamClass.java
+++ b/java/io/ObjectStreamClass.java
@@ -327,7 +327,7 @@ public class ObjectStreamClass implements Serializable
i = 0; j = 0; k = 0;
while (i < fields.length && j < exportedFields.length)
{
- int comp = fields[i].getName().compareTo(exportedFields[j].getName());
+ int comp = fields[i].compareTo(exportedFields[j]);
if (comp < 0)
{
@@ -344,10 +344,27 @@ public class ObjectStreamClass implements Serializable
newFieldList[k] = exportedFields[j];
newFieldList[k].setPersistent(true);
newFieldList[k].setToSet(false);
+ try
+ {
+ newFieldList[k].lookupField(clazz);
+ newFieldList[k].checkFieldType();
+ }
+ catch (NoSuchFieldException _)
+ {
+ }
j++;
}
else
{
+ try
+ {
+ exportedFields[j].lookupField(clazz);
+ exportedFields[j].checkFieldType();
+ }
+ catch (NoSuchFieldException _)
+ {
+ }
+
if (!fields[i].getType().equals(exportedFields[j].getType()))
throw new InvalidClassException
("serialPersistentFields must be compatible with" +
@@ -554,6 +571,19 @@ outer:
if (fields != null)
{
Arrays.sort (fields);
+ // Retrieve field reference.
+ for (int i=0; i < fields.length; i++)
+ {
+ try
+ {
+ fields[i].lookupField(cl);
+ }
+ catch (NoSuchFieldException _)
+ {
+ fields[i].setToSet(false);
+ }
+ }
+
calculateOffsets();
return;
}
@@ -798,7 +828,7 @@ outer:
fieldsArray = new ObjectStreamField[ o.length ];
System.arraycopy(o, 0, fieldsArray, 0, o.length);
-
+
return fieldsArray;
}