Tue, 26 Jul 2016 08:23:25 -0400
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();