diff options
author | twisti <none@none> | 2013-07-02 22:51:23 -0700 |
---|---|---|
committer | twisti <none@none> | 2013-07-02 22:51:23 -0700 |
commit | d0b9f5acecb7a5e0e17cb15e9fc7e44e50fc1d73 (patch) | |
tree | cbc34b3fda5934eee34d790d0ae2942664b5e280 /src/share/vm | |
parent | 171c14ed812405f942256afc2666a0ae30ed436a (diff) | |
parent | 20040265f6a80a6cf54ca5b4b3437937591bf83a (diff) |
Merge
Diffstat (limited to 'src/share/vm')
-rw-r--r-- | src/share/vm/prims/methodHandles.cpp | 7 | ||||
-rw-r--r-- | src/share/vm/runtime/reflection.cpp | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/share/vm/prims/methodHandles.cpp b/src/share/vm/prims/methodHandles.cpp index bb9da0034..ac1c796eb 100644 --- a/src/share/vm/prims/methodHandles.cpp +++ b/src/share/vm/prims/methodHandles.cpp @@ -1137,7 +1137,12 @@ JVM_ENTRY(jobject, MHN_resolve_Mem(JNIEnv *env, jobject igcls, jobject mname_jh, if (VerifyMethodHandles && caller_jh != NULL && java_lang_invoke_MemberName::clazz(mname()) != NULL) { Klass* reference_klass = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); - if (reference_klass != NULL) { + if (reference_klass != NULL && reference_klass->oop_is_objArray()) { + reference_klass = ObjArrayKlass::cast(reference_klass)->bottom_klass(); + } + + // Reflection::verify_class_access can only handle instance classes. + if (reference_klass != NULL && reference_klass->oop_is_instance()) { // Emulate LinkResolver::check_klass_accessability. Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh)); if (!Reflection::verify_class_access(caller, diff --git a/src/share/vm/runtime/reflection.cpp b/src/share/vm/runtime/reflection.cpp index 15869cc5c..f06a7f922 100644 --- a/src/share/vm/runtime/reflection.cpp +++ b/src/share/vm/runtime/reflection.cpp @@ -458,7 +458,7 @@ bool Reflection::verify_class_access(Klass* current_class, Klass* new_class, boo // doesn't have a classloader. if ((current_class == NULL) || (current_class == new_class) || - (InstanceKlass::cast(new_class)->is_public()) || + (new_class->is_public()) || is_same_class_package(current_class, new_class)) { return true; } |