Hi All,

Bug: https://bugs.openjdk.java.net/browse/JDK-6278300

Please review a fix for an issue where it is seen that
Deserialization of a javax.print.attribute.standard.MediaPrintableArea printer attribute fails when the serialization happened in a prior invocation of the program
only for a *non-standard* page size say 4"x6"

It is because EnumSyntax.readResolve() tries to get the EnumSyntax[] table from Win32MediaSize when the objects are read and if the EnumSyntax table is not initialized or 0 in length, then readResolve() will find the object value being read is not in the EnumSyntax table and will throw this InvalidObjectException

java.io.InvalidObjectException: Integer value = 9 not in valid range 0..-1for class class sun.print.Win32MediaSize at javax.print.attribute.EnumSyntax.readResolve(java.desktop@9-internal/EnumSyntax.java:204) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@9-internal/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@9-internal/NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-internal/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@9-internal/Method.java:533) at java.io.ObjectStreamClass.invokeReadResolve(java.base@9-internal/ObjectStreamClass.java:1150) at java.io.ObjectInputStream.readOrdinaryObject(java.base@9-internal/ObjectInputStream.java:1835) at java.io.ObjectInputStream.readObject0(java.base@9-internal/ObjectInputStream.java:1371) at java.io.ObjectInputStream.readObject(java.base@9-internal/ObjectInputStream.java:371)

When the printDialog() is invoked, then EnumSyntax table will be initialised to the current paper ids. But, if printDIalog() is invoked AFTER objects are deserialised, we run into this problem of enumTable being 0 in length.

Proposed fix is, to check if the enumtable is not initialised, then fallback to the supported media size enum table.

webrev: http://cr.openjdk.java.net/~psadhukhan/6278300/webrev.00/

I made it noreg-hard as it needs a custom paper size to be added to printer media list before invoking the serialization testcase present in JBS bug entry.

Regards
Prasanta

Reply via email to