changeset 6346:5f7e12f5b4e5

8036800: Attribute OOM to correct part of code Summary: checks that the attribute_length does not exceed the length of remaining data in the class file Reviewed-by: coleenp, ahgross
author hseigel
date Wed, 19 Mar 2014 14:02:51 -0400
parents aff11567504c
children 0297e36d24a1
files src/share/vm/classfile/classFileParser.cpp
diffstat 1 files changed, 8 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/classfile/classFileParser.cpp	Mon Mar 17 10:17:55 2014 -0400
+++ b/src/share/vm/classfile/classFileParser.cpp	Wed Mar 19 14:02:51 2014 -0400
@@ -2770,18 +2770,19 @@
   ClassFileStream* cfs = stream();
   u1* current_start = cfs->current();
 
-  cfs->guarantee_more(2, CHECK);  // length
-  int attribute_array_length = cfs->get_u2_fast();
-
-  guarantee_property(_max_bootstrap_specifier_index < attribute_array_length,
-                     "Short length on BootstrapMethods in class file %s",
-                     CHECK);
-
   guarantee_property(attribute_byte_length > sizeof(u2),
                      "Invalid BootstrapMethods attribute length %u in class file %s",
                      attribute_byte_length,
                      CHECK);
 
+  cfs->guarantee_more(attribute_byte_length, CHECK);
+
+  int attribute_array_length = cfs->get_u2_fast();
+
+  guarantee_property(_max_bootstrap_specifier_index < attribute_array_length,
+                     "Short length on BootstrapMethods in class file %s",
+                     CHECK);
+
   // The attribute contains a counted array of counted tuples of shorts,
   // represending bootstrap specifiers:
   //    length*{bootstrap_method_index, argument_count*{argument_index}}