Mercurial > hg > truffle
comparison src/share/vm/classfile/classFileParser.cpp @ 2085:ef3c5db0b3ae
7008165: Garbage in ClassFormatError message
Summary: When bootstrap_method_ref in BootstrapMethods attribute points to a wrong CP entry (non-MethodHandle), JVM throws ClassFormatError with a message, where method index and class file name is garbage.
Reviewed-by: iveresov
author | twisti |
---|---|
date | Tue, 21 Dec 2010 04:37:30 -0800 |
parents | dad31fc330cd |
children | 3582bf76420e |
comparison
equal
deleted
inserted
replaced
2084:1fb0500f550e | 2085:ef3c5db0b3ae |
---|---|
2384 u2 argument_count = cfs->get_u2_fast(); | 2384 u2 argument_count = cfs->get_u2_fast(); |
2385 check_property( | 2385 check_property( |
2386 valid_cp_range(bootstrap_method_index, cp_size) && | 2386 valid_cp_range(bootstrap_method_index, cp_size) && |
2387 cp->tag_at(bootstrap_method_index).is_method_handle(), | 2387 cp->tag_at(bootstrap_method_index).is_method_handle(), |
2388 "bootstrap_method_index %u has bad constant type in class file %s", | 2388 "bootstrap_method_index %u has bad constant type in class file %s", |
2389 bootstrap_method_index, | |
2389 CHECK); | 2390 CHECK); |
2390 operands->short_at_put(operand_fill_index++, bootstrap_method_index); | 2391 operands->short_at_put(operand_fill_index++, bootstrap_method_index); |
2391 operands->short_at_put(operand_fill_index++, argument_count); | 2392 operands->short_at_put(operand_fill_index++, argument_count); |
2392 | 2393 |
2393 cfs->guarantee_more(sizeof(u2) * argument_count, CHECK); // argv[argc] | 2394 cfs->guarantee_more(sizeof(u2) * argument_count, CHECK); // argv[argc] |
2394 for (int j = 0; j < argument_count; j++) { | 2395 for (int j = 0; j < argument_count; j++) { |
2395 u2 arg_index = cfs->get_u2_fast(); | 2396 u2 argument_index = cfs->get_u2_fast(); |
2396 check_property( | 2397 check_property( |
2397 valid_cp_range(arg_index, cp_size) && | 2398 valid_cp_range(argument_index, cp_size) && |
2398 cp->tag_at(arg_index).is_loadable_constant(), | 2399 cp->tag_at(argument_index).is_loadable_constant(), |
2399 "argument_index %u has bad constant type in class file %s", | 2400 "argument_index %u has bad constant type in class file %s", |
2401 argument_index, | |
2400 CHECK); | 2402 CHECK); |
2401 operands->short_at_put(operand_fill_index++, arg_index); | 2403 operands->short_at_put(operand_fill_index++, argument_index); |
2402 } | 2404 } |
2403 } | 2405 } |
2404 | 2406 |
2405 assert(operand_fill_index == operands()->length(), "exact fill"); | 2407 assert(operand_fill_index == operands()->length(), "exact fill"); |
2406 assert(constantPoolOopDesc::operand_array_length(operands()) == attribute_array_length, "correct decode"); | 2408 assert(constantPoolOopDesc::operand_array_length(operands()) == attribute_array_length, "correct decode"); |