diff options
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130618/8008132-better_serialization.patch')
-rw-r--r-- | java/openjdk6/files/icedtea/security/20130618/8008132-better_serialization.patch | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/java/openjdk6/files/icedtea/security/20130618/8008132-better_serialization.patch b/java/openjdk6/files/icedtea/security/20130618/8008132-better_serialization.patch deleted file mode 100644 index 9d2605eab931..000000000000 --- a/java/openjdk6/files/icedtea/security/20130618/8008132-better_serialization.patch +++ /dev/null @@ -1,121 +0,0 @@ -# HG changeset patch -# User Severin Gehwolf <sgehwolf@redhat.com> -# Date 1371476865 -7200 -# Node ID 5dd7618fd14c647d21d765fcc2431c9ee6289ae4 -# Parent 60c57caf0348c7eed93900e4395607af759e6ba9 -8008132: Better serialization support -Reviewed-by: alanb, hawtin - -diff --git a/src/share/classes/java/io/ObjectOutputStream.java b/src/share/classes/java/io/ObjectOutputStream.java ---- jdk/src/share/classes/java/io/ObjectOutputStream.java -+++ jdk/src/share/classes/java/io/ObjectOutputStream.java -@@ -36,6 +36,7 @@ - import java.util.concurrent.ConcurrentMap; - import static java.io.ObjectStreamClass.processQueue; - import java.io.SerialCallbackContext; -+import sun.reflect.misc.ReflectUtil; - - /** - * An ObjectOutputStream writes primitive data types and graphs of Java objects -@@ -1228,6 +1229,12 @@ - } - } - -+ private boolean isCustomSubclass() { -+ // Return true if this class is a custom subclass of ObjectOutputStream -+ return getClass().getClassLoader() -+ != ObjectOutputStream.class.getClassLoader(); -+ } -+ - /** - * Writes class descriptor representing a dynamic proxy class to stream. - */ -@@ -1245,6 +1252,9 @@ - } - - bout.setBlockDataMode(true); -+ if (isCustomSubclass()) { -+ ReflectUtil.checkPackageAccess(cl); -+ } - annotateProxyClass(cl); - bout.setBlockDataMode(false); - bout.writeByte(TC_ENDBLOCKDATA); -@@ -1271,6 +1281,9 @@ - - Class cl = desc.forClass(); - bout.setBlockDataMode(true); -+ if (isCustomSubclass()) { -+ ReflectUtil.checkPackageAccess(cl); -+ } - annotateClass(cl); - bout.setBlockDataMode(false); - bout.writeByte(TC_ENDBLOCKDATA); -diff --git a/src/share/classes/java/io/ObjectStreamClass.java b/src/share/classes/java/io/ObjectStreamClass.java ---- jdk/src/share/classes/java/io/ObjectStreamClass.java -+++ jdk/src/share/classes/java/io/ObjectStreamClass.java -@@ -50,6 +50,7 @@ - import java.util.concurrent.ConcurrentMap; - import sun.misc.Unsafe; - import sun.reflect.ReflectionFactory; -+import sun.reflect.misc.ReflectUtil; - - /** - * Serialization's descriptor for classes. It contains the name and -@@ -234,6 +235,13 @@ - * @return the <code>Class</code> instance that this descriptor represents - */ - public Class<?> forClass() { -+ if (cl == null) { -+ return null; -+ } -+ ClassLoader ccl = ObjectStreamField.getCallerClassLoader(); -+ if (ReflectUtil.needsPackageAccessCheck(ccl, cl.getClassLoader())) { -+ ReflectUtil.checkPackageAccess(cl); -+ } - return cl; - } - -diff --git a/src/share/classes/java/io/ObjectStreamField.java b/src/share/classes/java/io/ObjectStreamField.java ---- jdk/src/share/classes/java/io/ObjectStreamField.java -+++ jdk/src/share/classes/java/io/ObjectStreamField.java -@@ -26,6 +26,8 @@ - package java.io; - - import java.lang.reflect.Field; -+import sun.reflect.Reflection; -+import sun.reflect.misc.ReflectUtil; - - /** - * A description of a Serializable field from a Serializable class. An array -@@ -158,9 +160,31 @@ - * serializable field - */ - public Class<?> getType() { -+ ClassLoader ccl = getCallerClassLoader(); -+ if (ReflectUtil.needsPackageAccessCheck(ccl, type.getClassLoader())) { -+ ReflectUtil.checkPackageAccess(type); -+ } - return type; - } - -+ // Returns the invoker's class loader. -+ // This is package private because it is accessed from ObjectStreamClass. -+ // NOTE: This must always be invoked when there is exactly one intervening -+ // frame from the core libraries on the stack between this method's -+ // invocation and the desired invoker. The frame count of 3 is determined -+ // as follows: -+ // -+ // 0: Reflection.getCallerClass -+ // 1: getCallerClassLoader() -+ // 2: ObjectStreamField.getType() or ObjectStreamClass.forClass() -+ // 3: the caller we want to check -+ // -+ // NOTE: copied from java.lang.ClassLoader and modified. -+ static ClassLoader getCallerClassLoader() { -+ Class caller = Reflection.getCallerClass(3); -+ return caller.getClassLoader(); -+ } -+ - /** - * Returns character encoding of field type. The encoding is as follows: - * <blockquote><pre> |