diff src/share/vm/classfile/verifier.cpp @ 6155:d558e01a72c0

7160757: Problem with hotspot/runtime_classfile Summary: Allow only current and super invokespecials of <init> Reviewed-by: never, coleenp, dcubed
author kamg
date Thu, 03 May 2012 15:37:46 -0400
parents ed69575596ac
children 9d5f20961bc5
line wrap: on
line diff
--- a/src/share/vm/classfile/verifier.cpp	Thu Apr 12 12:07:09 2012 -0700
+++ b/src/share/vm/classfile/verifier.cpp	Thu May 03 15:37:46 2012 -0400
@@ -1880,10 +1880,10 @@
   VerificationType type = current_frame->pop_stack(
     VerificationType::reference_check(), CHECK_VERIFY(this));
   if (type == VerificationType::uninitialized_this_type()) {
-    // The method must be an <init> method of either this class, or one of its
-    // superclasses
+    // The method must be an <init> method of this class or its superclass
+    klassOop superk = current_class()->super();
     if (ref_class_type.name() != current_class()->name() &&
-        !name_in_supers(ref_class_type.name(), current_class())) {
+        ref_class_type.name() != superk->klass_part()->name()) {
       verify_error(bci, "Bad <init> method call");
       return;
     }