You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Dmitry M. Kononov (JIRA)" <ji...@apache.org> on 2006/03/07 14:27:39 UTC

[jira] Created: (HARMONY-187) java.io.ObjectOutputStream.writeUnshared() works incorrectly.

java.io.ObjectOutputStream.writeUnshared() works incorrectly.
-------------------------------------------------------------

         Key: HARMONY-187
         URL: http://issues.apache.org/jira/browse/HARMONY-187
     Project: Harmony
        Type: Bug
  Components: Classlib  
    Reporter: Dmitry M. Kononov


Say, we write the same object by the following code:

Object o = "foobar";
oos.writeObject(o);
oos.writeUnshared(o);
oos.writeObject(o);

And then, read the written data by the code as follows:

Object[] oa = new Object[3];
for (int i = 0; i < oa.length; i++) {
    oa[i] = ois.readObject();
}

We expect that:
1) the 0th and 1st elements of the array are not equal. That is, oa[0] != oa[1].
2) the 1st and 2nd elements of the array are not equal. That is, oa[1] != oa[2].
3) the 0th and 2nd elements of the array are equal. That is, oa[0] == oa[2].

All the three conditions are true if we run a test case in RI:
oa[0] != oa[1] - true
oa[1] != oa[2] - true
oa[0] == oa[2] - true

When we run the test case in Harmony the first condition is true and the rest two are false.
oa[0] != oa[1] - true
oa[1] != oa[2] - false
oa[0] == oa[2] - false

Here is an excerpt from the spec which shows us that Harmony behaves incorrectly:
"If writeObject is used to write an object that has been previously written with writeUnshared, the previous writeUnshared operation is treated as if it were a write of a separate object. In other words, ObjectOutputStream will never generate back-references to object data written by calls to writeUnshared"
Please note also, that oa[2] should be back-referenced to oa[0].

I will attach the test case.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (HARMONY-187) java.io.ObjectOutputStream.writeUnshared() works incorrectly.

Posted by "Dmitry M. Kononov (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-187?page=all ]

Dmitry M. Kononov updated HARMONY-187:
--------------------------------------

    Attachment: Test16.java

> java.io.ObjectOutputStream.writeUnshared() works incorrectly.
> -------------------------------------------------------------
>
>          Key: HARMONY-187
>          URL: http://issues.apache.org/jira/browse/HARMONY-187
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Dmitry M. Kononov
>  Attachments: Test16.java
>
> Say, we write the same object by the following code:
> Object o = "foobar";
> oos.writeObject(o);
> oos.writeUnshared(o);
> oos.writeObject(o);
> And then, read the written data by the code as follows:
> Object[] oa = new Object[3];
> for (int i = 0; i < oa.length; i++) {
>     oa[i] = ois.readObject();
> }
> We expect that:
> 1) the 0th and 1st elements of the array are not equal. That is, oa[0] != oa[1].
> 2) the 1st and 2nd elements of the array are not equal. That is, oa[1] != oa[2].
> 3) the 0th and 2nd elements of the array are equal. That is, oa[0] == oa[2].
> All the three conditions are true if we run a test case in RI:
> oa[0] != oa[1] - true
> oa[1] != oa[2] - true
> oa[0] == oa[2] - true
> When we run the test case in Harmony the first condition is true and the rest two are false.
> oa[0] != oa[1] - true
> oa[1] != oa[2] - false
> oa[0] == oa[2] - false
> Here is an excerpt from the spec which shows us that Harmony behaves incorrectly:
> "If writeObject is used to write an object that has been previously written with writeUnshared, the previous writeUnshared operation is treated as if it were a write of a separate object. In other words, ObjectOutputStream will never generate back-references to object data written by calls to writeUnshared"
> Please note also, that oa[2] should be back-referenced to oa[0].
> I will attach the test case.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira