changeset 27023:818f8a0c5d9d

8041717: Issue with class file parser Summary: Add better checking for bad values. Reviewed-by: coleenp, lfoltan, mschoene
author hseigel
date Fri, 30 May 2014 13:23:27 -0400
parents 2db6fe33afc2
children 1ebde58e3e42
files hotspot/src/share/vm/classfile/classFileParser.cpp
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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",