8133719: java.lang.InternalError in java.lang.invoke.MethodHandleImpl$BindCaller.bindCaller
Reviewed-by: psandoz
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Nov 30 19:52:20 2016 +0100
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Nov 29 01:06:10 2016 -0800
@@ -1147,12 +1147,14 @@
static
MethodHandle bindCaller(MethodHandle mh, Class<?> hostClass) {
- // Do not use this function to inject calls into system classes.
+ // Code in the the boot layer should now be careful while creating method handles or
+ // functional interface instances created from method references to @CallerSensitive methods,
+ // it needs to be ensured the handles or interface instances are kept safe and are not passed
+ // from the boot layer to untrusted code.
if (hostClass == null
|| (hostClass.isArray() ||
hostClass.isPrimitive() ||
- hostClass.getName().startsWith("java.") ||
- hostClass.getName().startsWith("sun."))) {
+ hostClass.getName().startsWith("java.lang.invoke."))) {
throw new InternalError(); // does not happen, and should not anyway
}
// For simplicity, convert mh to a varargs-like method.