[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