diff --git a/src/share/classes/java/util/Calendar.java b/src/share/classes/java/util/Calendar.java index e1f65e6a88500b6177351229844bc19a682f8927..072de9e142f5e1ec20452b6a8dac40b8d5fe30de 100644 --- a/src/share/classes/java/util/Calendar.java +++ b/src/share/classes/java/util/Calendar.java @@ -41,9 +41,14 @@ package java.util; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.OptionalDataException; import java.io.Serializable; +import java.security.AccessControlContext; import java.security.AccessController; +import java.security.PermissionCollection; +import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; +import java.security.ProtectionDomain; import java.text.DateFormat; import java.text.DateFormatSymbols; import sun.util.BuddhistCalendar; @@ -2626,6 +2631,18 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable() { + public ZoneInfo run() throws Exception { + return (ZoneInfo) input.readObject(); + } + }, + CalendarAccessControlContext.INSTANCE); + } catch (PrivilegedActionException pae) { + Exception e = pae.getException(); + if (!(e instanceof OptionalDataException)) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else if (e instanceof IOException) { + throw (IOException) e; + } else if (e instanceof ClassNotFoundException) { + throw (ClassNotFoundException) e; + } + throw new RuntimeException(e); } - } catch (Exception e) { + } + if (zi != null) { + zone = zi; } // If the deserialized object has a SimpleTimeZone, try to @@ -2674,9 +2704,9 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable