6806226: Signed integer overflow in growable array code causes JVM crash
Workaround the overflow by doing the intermediate calculations in an unsigned variable. Reviewed-by: ysr, jcoomes
This commit is contained in:
parent
7efb6ac73a
commit
b051a23591
@ -43,11 +43,13 @@ void GenericGrowableArray::check_nesting() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void* GenericGrowableArray::raw_allocate(int elementSize) {
|
void* GenericGrowableArray::raw_allocate(int elementSize) {
|
||||||
|
assert(_max >= 0, "integer overflow");
|
||||||
|
size_t byte_size = elementSize * (size_t) _max;
|
||||||
if (on_stack()) {
|
if (on_stack()) {
|
||||||
return (void*)resource_allocate_bytes(elementSize * _max);
|
return (void*)resource_allocate_bytes(byte_size);
|
||||||
} else if (on_C_heap()) {
|
} else if (on_C_heap()) {
|
||||||
return (void*)AllocateHeap(elementSize * _max, "GrET in " __FILE__);
|
return (void*)AllocateHeap(byte_size, "GrET in " __FILE__);
|
||||||
} else {
|
} else {
|
||||||
return _arena->Amalloc(elementSize * _max);
|
return _arena->Amalloc(byte_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user