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());
            oout.writeObject("test");
            oout.close();
            pos = 0;
            ObjectInputStream oin = new TestObjectInputStream(pin);
            oin.readObject();
            oin.readObject();
            System.out.println("Done.");
        } catch (Exception ex) { 
            ex.printStackTrace();
        }
    }

    public static class TestExtObject implements Externalizable {
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeInt(10);
        }

        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
            in.readInt();
        }
    }

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

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

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

        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.


Mime
View raw message