8041717: Issue with class file parser
Summary: Add better checking for bad values.
Reviewed-by: coleenp, lfoltan, mschoene
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp Tue Jul 22 16:16:51 2014 +0400
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp Fri May 30 13:23:27 2014 -0400
@@ -2859,6 +2859,11 @@
"bootstrap_method_index %u has bad constant type in class file %s",
bootstrap_method_index,
CHECK);
+
+ guarantee_property((operand_fill_index + 1 + argument_count) < operands->length(),
+ "Invalid BootstrapMethods num_bootstrap_methods or num_bootstrap_arguments value in class file %s",
+ CHECK);
+
operands->at_put(operand_fill_index++, bootstrap_method_index);
operands->at_put(operand_fill_index++, argument_count);
@@ -2875,8 +2880,6 @@
}
}
- assert(ConstantPool::operand_array_length(operands) == attribute_array_length, "correct decode");
-
u1* current_end = cfs->current();
guarantee_property(current_end == current_start + attribute_byte_length,
"Bad length on BootstrapMethods in class file %s",