[Record Serialization] serialVersionUID bug?

Chris Yin xu.y.yin at oracle.com
Fri Nov 15 08:24:29 UTC 2019


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