mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
8035119: Fix exceptions to bytecode verification
Prevent ctor calls to super() and this() from avoidable code (try blocks, if stmts, etc.) Reviewed-by: coleenp, acorn, mschoene
This commit is contained in:
parent
afbd45bb8c
commit
13d9244b49
3 changed files with 45 additions and 1 deletions
|
@ -258,6 +258,9 @@ class ClassVerifier : public StackObj {
|
|||
|
||||
ErrorContext _error_context; // contains information about an error
|
||||
|
||||
// Used to detect illegal jumps over calls to super() nd this() in ctors.
|
||||
int32_t _furthest_jump;
|
||||
|
||||
void verify_method(methodHandle method, TRAPS);
|
||||
char* generate_code_data(methodHandle m, u4 code_length, TRAPS);
|
||||
void verify_exception_handler_table(u4 code_length, char* code_data,
|
||||
|
@ -403,6 +406,20 @@ class ClassVerifier : public StackObj {
|
|||
Symbol* create_temporary_symbol(const char *s, int length, TRAPS);
|
||||
|
||||
TypeOrigin ref_ctx(const char* str, TRAPS);
|
||||
|
||||
// Keep track of the furthest branch done in a method to make sure that
|
||||
// there are no branches over calls to super() or this() from inside of
|
||||
// a constructor.
|
||||
int32_t furthest_jump() { return _furthest_jump; }
|
||||
|
||||
void set_furthest_jump(int32_t target) {
|
||||
_furthest_jump = target;
|
||||
}
|
||||
|
||||
void update_furthest_jump(int32_t target) {
|
||||
if (target > _furthest_jump) _furthest_jump = target;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
inline int ClassVerifier::change_sig_to_verificationType(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue