diff options
author | Tom Tromey <tromey@redhat.com> | 2001-12-04 20:18:35 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2001-12-04 20:18:35 +0000 |
commit | ef9f3bc4493033daaa1ccd509817226d01e0202b (patch) | |
tree | 106e1d4bef880d76ab5ec7fbfb57a2f2fe42f3b6 /libjava/defineclass.cc | |
parent | 5b5e609d03ec31780977795463c3b12f1c2387f3 (diff) | |
download | gcc-ef9f3bc4493033daaa1ccd509817226d01e0202b.tar.gz |
defineclass.cc (read_one_method_attribute): `end_pc' for an exception can be equal to code length.
* defineclass.cc (read_one_method_attribute): `end_pc' for an
exception can be equal to code length.
* verify.cc (_Jv_BytecodeVerifier::verify_instructions_0): Removed
`start_PC' from error invocation where it didn't make sense, and
updated error message. Use `copy' to copy a state. Only try to
merge current state with saved state when we've fallen through
from the previous instruction.
(_Jv_BytecodeVerifier::pop_ref_or_return): New method.
(_Jv_BytecodeVerifier::verify_instructions_0) [op_astore_0]: Use
pop_ref_or_return.
(_Jv_BytecodeVerifier::verify_instructions_0) [op_astore]:
Likewise.
(_Jv_BytecodeVerifier::push_jump_merge): Pass max_locals, not
max_stack, to merge.
(_Jv_BytecodeVerifier::verify_instructions_0): Likewise.
(_Jv_BytecodeVerifier::push_jump_merge): Merge from new state into
state at branch target, not vice versa.
(_Jv_BytecodeVerifier::branch_prepass): Allow end of exception to
be equal to code length. Removed redundant test to see if
exception start is after exception end.
(_Jv_BytecodeVerifier::verify_instructions_0): Type of argument to
`finally' is Throwable.
From-SVN: r47623
Diffstat (limited to 'libjava/defineclass.cc')
-rw-r--r-- | libjava/defineclass.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libjava/defineclass.cc b/libjava/defineclass.cc index 31a46625320..5fb8de3b0f3 100644 --- a/libjava/defineclass.cc +++ b/libjava/defineclass.cc @@ -582,7 +582,9 @@ void _Jv_ClassReader::read_one_method_attribute (int method_index) if (start_pc > end_pc || start_pc < 0 - || end_pc >= code_length + // END_PC can be equal to CODE_LENGTH. + // See JVM Spec 4.7.4. + || end_pc > code_length || handler_pc >= code_length) throw_class_format_error ("erroneous exception handler info"); |