We have tested some Classpath serialization mechanisms with ORP providing complementary native implementations. We found some problems in ObjectInputStream/ObjectOutputStream/ ObjectStreamClass/Throwable classes. Here is the first of the series. 1. About ObjectOutputStream Considered the patched writeObject: public final void writeObject (Object obj) throws IOException { ... .... try { isSerializing = true; boolean replaceDone = false; drain (); + Object replacedObject = null; <- Comment 1 while (true) { - Object replacedObject = null; <- Comment 1 if ((replacementEnabled || obj instanceof Serializable) && ! replaceDone) { replacedObject = obj; ... ... replaceDone = true; continue; } ... ... if (replaceDone) assignNewHandle (replacedObject); else assignNewHandle (obj); ... ... throw new NotSerializableException (clazz.getName ()); } // end pseudo-loop } catch (IOException e) { + if(e instanceof NotSerializableException ){ <- Comment 2 + throw e; + } realOutput.writeByte (TC_EXCEPTION); reset (true); try { writeObject (e); } catch (IOException ioe) { throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream."); } ... ... } Comment 1: We should move the declaration "Object replacedObject = null;" out of while loop, orelse in the next loop, replacedObject is reset to null, but replaceDone remains true, system will crash here: assignNewHandle (replacedObject); //replacedObject is a null object Comment 2: We add some extra stuff in the "catch (IOException e)", consider the snariso: a. because the object is not serializable, so run to "throw new NotSerializableException (clazz.getName ());"; b. because NotSerializableException inherits IOException indirectly, this exception is caught, and the exception object is serialized, but it's not reasonable, the exception should be caught by application logic. So I think a more check should be performed. BTW, I wonder if catching IOException is feasible here, because most of cases if real IOException happens, further serialization will fail again. So I think we might refine the exception handling here (other more specific exceptions). _______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/classpath