harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Markov (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-4996) [classlib][luni] Incorrect deserialization of Externalizable classes
Date Mon, 22 Oct 2007 16:48:50 GMT
[classlib][luni] Incorrect deserialization of Externalizable classes

                 Key: HARMONY-4996
                 URL: https://issues.apache.org/jira/browse/HARMONY-4996
             Project: Harmony
          Issue Type: Bug
          Components: App-Oriented Bug Reports, Classlib
         Environment: Win XP
            Reporter: Mikhail Markov
            Assignee: Mikhail Markov

The testcase below passed on RI but failed on Harmony with the following stacktrace:
java.io.StreamCorruptedException: Wrong format: 0x0
        at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:842)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2128)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:283)
        at Test.main(Test.java:18)

--------------------------- Test.java --------------------------------
import java.io.*;

public class Test {
    static ObjectStreamClass[] objs = new ObjectStreamClass[1000];
    static int pos = 0;

    public static void main(String[] args) {
        try {
            PipedOutputStream pout = new PipedOutputStream();
            PipedInputStream pin = new PipedInputStream(pout);
            ObjectOutputStream oout = new TestObjectOutputStream(pout);
            oout.writeObject(new TestExtObject());
            pos = 0;
            ObjectInputStream oin = new TestObjectInputStream(pin);
        } catch (Exception ex) { 

    public static class TestExtObject implements Externalizable {
        public void writeExternal(ObjectOutput out) throws IOException {

        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException

    static class TestObjectOutputStream extends ObjectOutputStream {
        public TestObjectOutputStream(OutputStream out) throws IOException {

        protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException {
            objs[pos++] = osc;        }

    static class TestObjectInputStream extends ObjectInputStream {
        public TestObjectInputStream(InputStream in) throws IOException {

        protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException
            return (ObjectStreamClass) objs[pos++];

This test actually saves the incoming ObjectStreamClass-es in local array and does not write
them to ObjectOutputStream (and takes them from this array in de-serialization). It seems
like Externalizable class does not properly de-serialized as the exception occured during
the next readObject() call.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message