8161218: Better bytecode loading

Tue, 26 Jul 2016 08:23:25 -0400

author
shshahma
date
Tue, 26 Jul 2016 08:23:25 -0400
changeset 8676
b4b7e6bb414d
parent 8675
5c22c4afdafb
child 8677
f797a341d89e

8161218: Better bytecode loading
Reviewed-by: acorn, mschoene, ctornqvi
Contributed-by: harold.seigel@oracle.com

src/share/vm/classfile/verifier.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/classfile/verifier.cpp	Thu Jul 14 13:19:11 2016 -0700
     1.2 +++ b/src/share/vm/classfile/verifier.cpp	Tue Jul 26 08:23:25 2016 -0400
     1.3 @@ -504,19 +504,13 @@
     1.4      stack_map_frame* sm_frame = sm_table->entries();
     1.5      streamIndentor si2(ss);
     1.6      int current_offset = -1;
     1.7 -    // Subtract two from StackMapAttribute length because the length includes
     1.8 -    // two bytes for number of table entries.
     1.9 -    size_t sm_table_space = method->stackmap_data()->length() - 2;
    1.10 +    address end_of_sm_table = (address)sm_table + method->stackmap_data()->length();
    1.11      for (u2 i = 0; i < sm_table->number_of_entries(); ++i) {
    1.12        ss->indent();
    1.13 -      size_t sm_frame_size = sm_frame->size();
    1.14 -      // If the size of the next stackmap exceeds the length of the entire
    1.15 -      // stackmap table then print a truncated message and return.
    1.16 -      if (sm_frame_size > sm_table_space) {
    1.17 +      if (!sm_frame->verify((address)sm_frame, end_of_sm_table)) {
    1.18          sm_frame->print_truncated(ss, current_offset);
    1.19          return;
    1.20        }
    1.21 -      sm_table_space -= sm_frame_size;
    1.22        sm_frame->print_on(ss, current_offset);
    1.23        ss->cr();
    1.24        current_offset += sm_frame->offset_delta();

mercurial