Mercurial > hg > release > icedtea7-forest-2.3 > jdk
changeset 6356:e049e7af186c
8017300: Improve Interface Implementation
Reviewed-by: ahgross, jlaskey, mchung
author | sundar |
---|---|
date | Thu, 10 Oct 2013 16:05:52 +0100 |
parents | e47ebe9e1891 |
children | 4c14bd341854 |
files | src/share/classes/com/sun/script/util/InterfaceImplementor.java src/share/lib/security/java.security src/share/lib/security/java.security-macosx src/share/lib/security/java.security-solaris src/share/lib/security/java.security-windows test/java/lang/SecurityManager/CheckPackageAccess.java |
diffstat | 6 files changed, 38 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/script/util/InterfaceImplementor.java Mon Jul 15 03:40:16 2013 -0700 +++ b/src/share/classes/com/sun/script/util/InterfaceImplementor.java Thu Oct 10 16:05:52 2013 +0100 @@ -28,6 +28,7 @@ import javax.script.*; import java.lang.reflect.*; import java.security.*; +import sun.reflect.misc.ReflectUtil; /* * java.lang.reflect.Proxy based interface implementor. This is meant @@ -85,8 +86,18 @@ if (! isImplemented(thiz, iface)) { return null; } + + if (System.getSecurityManager() != null && + !Modifier.isPublic(iface.getModifiers())) { + throw new SecurityException("attempt to implement non-public interface"); + } + + // make sure restricted package interfaces are not attempted. + ReflectUtil.checkPackageAccess(iface.getName()); + AccessControlContext accCtxt = AccessController.getContext(); - return iface.cast(Proxy.newProxyInstance(iface.getClassLoader(), + return iface.cast(Proxy.newProxyInstance( + getLoaderForProxy(iface), new Class[]{iface}, new InterfaceImplementorInvocationHandler(thiz, accCtxt))); } @@ -108,4 +119,20 @@ // default is identity conversion return args; } + + // get appropriate ClassLoader for generated Proxy class + private static ClassLoader getLoaderForProxy(Class<?> iface) { + ClassLoader loader = iface.getClassLoader(); + + // if bootstrap class, try TCCL + if (loader == null) { + loader = Thread.currentThread().getContextClassLoader(); + } + + // if TCCL is also null, try System class loader + if (loader == null) { + loader = ClassLoader.getSystemClassLoader(); + } + return loader; + } }
--- a/src/share/lib/security/java.security Mon Jul 15 03:40:16 2013 -0700 +++ b/src/share/lib/security/java.security Thu Oct 10 16:05:52 2013 +0100 @@ -129,6 +129,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\ @@ -166,6 +167,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-macosx Mon Jul 15 03:40:16 2013 -0700 +++ b/src/share/lib/security/java.security-macosx Thu Oct 10 16:05:52 2013 +0100 @@ -130,6 +130,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\ @@ -168,6 +169,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-solaris Mon Jul 15 03:40:16 2013 -0700 +++ b/src/share/lib/security/java.security-solaris Thu Oct 10 16:05:52 2013 +0100 @@ -131,6 +131,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\ @@ -168,6 +169,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-windows Mon Jul 15 03:40:16 2013 -0700 +++ b/src/share/lib/security/java.security-windows Thu Oct 10 16:05:52 2013 +0100 @@ -130,6 +130,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\ @@ -168,6 +169,7 @@ com.sun.istack.internal.,\ com.sun.jmx.,\ com.sun.proxy.,\ + com.sun.script.,\ com.sun.org.apache.bcel.internal.,\ com.sun.org.apache.regexp.internal.,\ com.sun.org.apache.xerces.internal.,\
--- a/test/java/lang/SecurityManager/CheckPackageAccess.java Mon Jul 15 03:40:16 2013 -0700 +++ b/test/java/lang/SecurityManager/CheckPackageAccess.java Thu Oct 10 16:05:52 2013 +0100 @@ -33,7 +33,8 @@ String[] pkgs = new String[] { "com.sun.org.apache.xerces.internal.utils.", - "com.sun.org.apache.xalan.internal.utils." }; + "com.sun.org.apache.xalan.internal.utils.", + "com.sun.script." }; SecurityManager sm = new SecurityManager(); System.setSecurityManager(sm); for (String pkg : pkgs) {