OpenJDK / jdk7u / jdk7u / jdk
changeset 6652:b6ab933f06e0
8012277: Improve AWT DataFlavor
Reviewed-by: art, skoivu
author | malenkov |
---|---|
date | Fri, 31 May 2013 20:43:32 +0400 |
parents | 65b07e0a2f36 |
children | 0b84d3b434c2 |
files | src/share/classes/java/awt/datatransfer/DataFlavor.java |
diffstat | 1 files changed, 31 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/awt/datatransfer/DataFlavor.java Wed May 22 22:52:55 2013 -0700 +++ b/src/share/classes/java/awt/datatransfer/DataFlavor.java Fri May 31 20:43:32 2013 +0400 @@ -25,12 +25,14 @@ package java.awt.datatransfer; -import java.awt.Toolkit; import java.io.*; import java.nio.*; import java.util.*; import sun.awt.datatransfer.DataTransferer; +import sun.reflect.misc.ReflectUtil; + +import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION; /** * A {@code DataFlavor} provides meta information about data. {@code DataFlavor} @@ -117,26 +119,36 @@ ClassLoader fallback) throws ClassNotFoundException { - ClassLoader systemClassLoader = (ClassLoader) - java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { - ClassLoader cl = Thread.currentThread(). - getContextClassLoader(); - return (cl != null) - ? cl - : ClassLoader.getSystemClassLoader(); + ReflectUtil.checkPackageAccess(className); + try { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission(GET_CLASSLOADER_PERMISSION); + } + ClassLoader loader = ClassLoader.getSystemClassLoader(); + try { + // bootstrap class loader and system class loader if present + return Class.forName(className, true, loader); + } + catch (ClassNotFoundException exception) { + // thread context class loader if and only if present + loader = Thread.currentThread().getContextClassLoader(); + if (loader != null) { + try { + return Class.forName(className, true, loader); } - }); - - try { - return Class.forName(className, true, systemClassLoader); - } catch (ClassNotFoundException e2) { - if (fallback != null) { - return Class.forName(className, true, fallback); - } else { - throw new ClassNotFoundException(className); + catch (ClassNotFoundException e) { + // fallback to user's class loader + } + } } + } catch (SecurityException exception) { + // ignore secured class loaders + } + if (fallback != null) { + return Class.forName(className, true, fallback); + } else { + throw new ClassNotFoundException(className); } }