[Record Serialization] serialVersionUID bug?
Harold Seigel
harold.seigel at oracle.com
Fri Nov 15 16:02:08 UTC 2019
This same problem is also causing JTReg test
java/io/Serializable/class/NonSerializableTest.java to fail.
Harold
On 11/15/2019 3:24 AM, Chris Yin wrote:
> Hi, experts
>
> I’m looking into Amber Record feature, and found some strange behavior regarding to serialization serialVersionUID.
>
> Per latest spec “The requirement for matching serialVersionUID values is waived for record classes.”, but during testing, it’s not, record class will encounter InvalidClassException during deserialization when serialVersionUID is different between stream classdesc and local class, instead, the traditional normal class could deserialize succeed even serialVersionUID mismatch, that looks like a bug and a regression to normal class serialization/deserialization.
>
> I created one rough test below to reproduce the issue
>
> http://cr.openjdk.java.net/~xyin/VersionUIDNotMatch/webrev.00/ <http://cr.openjdk.java.net/~xyin/VersionUIDNotMatch/webrev.00/>
>
> Also after checking the stack and repo changes, it may caused by below change to ObjectStreamClass.java
>
> http://hg.openjdk.java.net/amber/amber/rev/d883cdec18e3 <http://hg.openjdk.java.net/amber/amber/rev/d883cdec18e3>
>
> Maybe possible fix?
>
> diff -r 4e41f62dfddb src/java.base/share/classes/java/io/ObjectStreamClass.java
> --- a/src/java.base/share/classes/java/io/ObjectStreamClass.java Wed Nov 13 15:42:59 2019 -0800
> +++ b/src/java.base/share/classes/java/io/ObjectStreamClass.java Fri Nov 15 15:49:41 2019 +0800
> @@ -706,7 +706,7 @@
> }
>
> if (model.serializable == osc.serializable &&
> - !cl.isArray() && isRecord(cl) &&
> + !cl.isArray() && !isRecord(cl) &&
> suid != osc.getSerialVersionUID()) {
> throw new InvalidClassException(osc.name,
> "local class incompatible: “ +
>
>
> Thanks,
> Chris
>
More information about the amber-dev
mailing list