From c49e2e93be8eb4a02028c62d3608c9119fcc7879 Mon Sep 17 00:00:00 2001 From: okutsu Date: Thu, 2 Oct 2008 16:49:33 +0900 Subject: [PATCH] 6734167: Calendar.readObject allows elevation of privileges Reviewed-by: peytoia --- src/share/classes/java/util/Calendar.java | 54 ++++++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/src/share/classes/java/util/Calendar.java b/src/share/classes/java/util/Calendar.java index e1f65e6a8..072de9e14 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