diff --git a/src/java.base/share/classes/java/lang/StringCoding.java b/src/java.base/share/classes/java/lang/StringCoding.java index 097c156654..a2aa7c7787 100644 --- a/src/java.base/share/classes/java/lang/StringCoding.java +++ b/src/java.base/share/classes/java/lang/StringCoding.java @@ -23,6 +23,12 @@ * questions. */ +/* +* =========================================================================== +* (c) Copyright IBM Corp. 2024, 2024 All Rights Reserved +* =========================================================================== +*/ + package java.lang; import java.io.UnsupportedEncodingException; @@ -94,7 +100,11 @@ private static byte[] safeTrim(byte[] ba, int len, boolean isTrusted) { private static int scale(int len, float expansionFactor) { // We need to perform double, not float, arithmetic; otherwise // we lose low order bits when len is larger than 2**24. - return (int)(len * (double)expansionFactor); + double result = len * (double)expansionFactor; + if (result > (double)Integer.MAX_VALUE) { + throw new OutOfMemoryError("Requested array size exceeds limit"); + } + return (int)result; } private static Charset lookupCharset(String csn) {