Re: [cp-patches] RFC: Patch for duplicate entries in serialPersistentFields
On Sat, 2005-12-10 at 20:16 +0100, Guilhem Lavaux wrote: Hi, Here is a patch which (partially) fix a regression in kaffe. If you define a class like that: class A { private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField(i, int.class), new ObjectStreamField(i, int.class) }; /* ... */ }; then the JDK throws an InvalidClassException in ObjectStreamClass.lookup. This goes against the API. However it is true that we must take into account the presence of duplicate fields. So I propose we throw an InvalidClassException on writing the object if this sort of situation happens. Why not do similar and throw the InvalidClassException from ObjectStreamClass.lookup()? (But then document that clearly in our version of course.) If you do like in your patch then at least document this behavior. It is slightly confusing that ObjectStreamClass.lookup() returns a non-null result, but getFields() suddenly returns an empty ObjectStreamField array as if there are no Serializable fields. Now user code has no real way to check whether that is because the ObjectStreamClass is invalid (because of bogus serialPersistentFields) or because it just has no serializable fields. Cheers, Mark signature.asc Description: This is a digitally signed message part ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches
Re: [cp-patches] RFC: Patch for duplicate entries in serialPersistentFields
Mark Wielaard wrote: On Sat, 2005-12-10 at 20:16 +0100, Guilhem Lavaux wrote: Hi, Here is a patch which (partially) fix a regression in kaffe. If you define a class like that: class A { private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField(i, int.class), new ObjectStreamField(i, int.class) }; /* ... */ }; then the JDK throws an InvalidClassException in ObjectStreamClass.lookup. This goes against the API. However it is true that we must take into account the presence of duplicate fields. So I propose we throw an InvalidClassException on writing the object if this sort of situation happens. Why not do similar and throw the InvalidClassException from ObjectStreamClass.lookup()? (But then document that clearly in our version of course.) Because we would not have the same API. ObjectStreamClass.lookup may not throw any exception (except the default ones like Error, NPE, ...). If you do like in your patch then at least document this behavior. It is slightly confusing that ObjectStreamClass.lookup() returns a non-null result, but getFields() suddenly returns an empty ObjectStreamField array as if there are no Serializable fields. Now user code has no real way to check whether that is because the ObjectStreamClass is invalid (because of bogus serialPersistentFields) or because it just has no serializable fields. Ok. I may add some documentation on that. Cheers, Guilhem. ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches
Re: [cp-patches] RFC: Patch for duplicate entries in serialPersistentFields
Hi Guilhem, On Sun, 2005-12-11 at 16:41 +0100, Guilhem Lavaux wrote: Why not do similar and throw the InvalidClassException from ObjectStreamClass.lookup()? (But then document that clearly in our version of course.) Because we would not have the same API. ObjectStreamClass.lookup may not throw any exception (except the default ones like Error, NPE, ...). O man, it is a checked exception... How ugly. I see why you don't want to do that. If you do like in your patch then at least document this behavior. It is slightly confusing that ObjectStreamClass.lookup() returns a non-null result, but getFields() suddenly returns an empty ObjectStreamField array as if there are no Serializable fields. Now user code has no real way to check whether that is because the ObjectStreamClass is invalid (because of bogus serialPersistentFields) or because it just has no serializable fields. Ok. I may add some documentation on that. One other suggestion. Might it make sense to do the caching, comparing and sorting in getSerialPersistentFields()? As it is done now we seem to copy and sort this array a lot of times. Cheers, Mark signature.asc Description: This is a digitally signed message part ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches
Re: [cp-patches] RFC: Patch for duplicate entries in serialPersistentFields
Hi Mark, Mark Wielaard wrote: Hi Guilhem, On Sun, 2005-12-11 at 16:41 +0100, Guilhem Lavaux wrote: Why not do similar and throw the InvalidClassException from ObjectStreamClass.lookup()? (But then document that clearly in our version of course.) Because we would not have the same API. ObjectStreamClass.lookup may not throw any exception (except the default ones like Error, NPE, ...). O man, it is a checked exception... How ugly. I see why you don't want to do that. If you do like in your patch then at least document this behavior. It is slightly confusing that ObjectStreamClass.lookup() returns a non-null result, but getFields() suddenly returns an empty ObjectStreamField array as if there are no Serializable fields. Now user code has no real way to check whether that is because the ObjectStreamClass is invalid (because of bogus serialPersistentFields) or because it just has no serializable fields. Ok. I may add some documentation on that. One other suggestion. Might it make sense to do the caching, comparing and sorting in getSerialPersistentFields()? As it is done now we seem to copy and sort this array a lot of times. Yes we can factorize some code. However the double sort in setFields is necessary: first we compare the names and then we want the full sort relatively also to types. Cheers, Guilhem. ___ Classpath-patches mailing list Classpath-patches@gnu.org http://lists.gnu.org/mailman/listinfo/classpath-patches