8312401: SymbolTable::do_add_if_needed hangs when called in InstanceKlass::add_initialization_error path with requesting length exceeds max_symbol_length

Reviewed-by: dholmes, coleenp, iklam
This commit is contained in:
Jiangli Zhou 2023-07-25 16:37:51 +00:00
parent e554fdee25
commit 36f3bae556
3 changed files with 55 additions and 2 deletions

View file

@ -338,6 +338,7 @@ Symbol* SymbolTable::lookup_common(const char* name,
}
Symbol* SymbolTable::new_symbol(const char* name, int len) {
assert(len <= Symbol::max_length(), "sanity");
unsigned int hash = hash_symbol(name, len, _alt_hash);
Symbol* sym = lookup_common(name, len, hash);
if (sym == nullptr) {
@ -353,6 +354,7 @@ Symbol* SymbolTable::new_symbol(const Symbol* sym, int begin, int end) {
assert(sym->refcount() != 0, "require a valid symbol");
const char* name = (const char*)sym->base() + begin;
int len = end - begin;
assert(len <= Symbol::max_length(), "sanity");
unsigned int hash = hash_symbol(name, len, _alt_hash);
Symbol* found = lookup_common(name, len, hash);
if (found == nullptr) {