diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-04 20:18:35 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-04 20:18:35 +0000 |
commit | db735aa9b33f9a8b544b300acb1c1879da04add7 (patch) | |
tree | 106e1d4bef880d76ab5ec7fbfb57a2f2fe42f3b6 /libjava/defineclass.cc | |
parent | 08f83147c47efb68721f16da66b4a63684de05d1 (diff) | |
download | gcc-db735aa9b33f9a8b544b300acb1c1879da04add7.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47623 138bc75d-0d04-0410-961f-82ee72b054a4
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"); |