提交 91eb5f17 编写于 作者: A apangin

6964170: Verifier crashes

Summary: Check if klassOop != NULL rather than klass_part != NULL
Reviewed-by: kamg, never
上级 2e768006
...@@ -70,8 +70,10 @@ bool VerificationType::is_reference_assignable_from( ...@@ -70,8 +70,10 @@ bool VerificationType::is_reference_assignable_from(
} else if (is_array() && from.is_array()) { } else if (is_array() && from.is_array()) {
VerificationType comp_this = get_component(CHECK_false); VerificationType comp_this = get_component(CHECK_false);
VerificationType comp_from = from.get_component(CHECK_false); VerificationType comp_from = from.get_component(CHECK_false);
if (!comp_this.is_bogus() && !comp_from.is_bogus()) {
return comp_this.is_assignable_from(comp_from, context, CHECK_false); return comp_this.is_assignable_from(comp_from, context, CHECK_false);
} }
}
return false; return false;
} }
...@@ -98,7 +100,7 @@ VerificationType VerificationType::get_component(TRAPS) const { ...@@ -98,7 +100,7 @@ VerificationType VerificationType::get_component(TRAPS) const {
CHECK_(VerificationType::bogus_type())); CHECK_(VerificationType::bogus_type()));
return VerificationType::reference_type(component); return VerificationType::reference_type(component);
default: default:
ShouldNotReachHere(); // Met an invalid type signature, e.g. [X
return VerificationType::bogus_type(); return VerificationType::bogus_type();
} }
} }
......
...@@ -1847,12 +1847,8 @@ void ClassVerifier::verify_invoke_init( ...@@ -1847,12 +1847,8 @@ void ClassVerifier::verify_invoke_init(
if (type == VerificationType::uninitialized_this_type()) { if (type == VerificationType::uninitialized_this_type()) {
// The method must be an <init> method of either this class, or one of its // The method must be an <init> method of either this class, or one of its
// superclasses // superclasses
klassOop oop = current_class()(); if (ref_class_type.name() != current_class()->name() &&
Klass* klass = oop->klass_part(); !name_in_supers(ref_class_type.name(), current_class())) {
while (klass != NULL && ref_class_type.name() != klass->name()) {
klass = klass->super()->klass_part();
}
if (klass == NULL) {
verify_error(bci, "Bad <init> method call"); verify_error(bci, "Bad <init> method call");
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册