On Fri, 8 Dec 2023 19:50:30 GMT, Roger Riggs <rri...@openjdk.org> wrote:
>> In the compact string implementation of non-latin1 (UTF16) strings the >> length is constrained by VM implementation limit on the size a byte array >> that can be allocated. To produce a useful exception the implementation >> checks the string size against the maximum byte array size. The exception >> message is correct >> >> "UTF16 String size is " + len + ", should be less than or equal to " + >> MAX_LENGTH >> >> The code should match the message, otherwise the exception thrown is: >> >> java.lang.OutOfMemoryError: Requested array size exceeds VM limit > > Roger Riggs has updated the pull request incrementally with one additional > commit since the last revision: > > As suggested by reviewers > Correct exception message text > Removed unused imports test/jdk/java/lang/String/CompactString/MaxSizeUTF16String.java line 53: > 51: int nonAsciiSize = nonAscii.length; > 52: int asciisize = byteSize - nonAsciiSize; > 53: byte[] arr = new byte[asciisize + nonAsciiSize]; Suggestion: byte[] arr = new byte[byteSize]; Note that `asciisize + nonAsciiSize` = `byteSize - nonAsciiSize + nonAsciiSize` = `byteSize`, even in the presence of overflows. Then `asciisize` becomes useless. test/jdk/java/lang/String/CompactString/MaxSizeUTF16String.java line 54: > 52: int asciisize = byteSize - nonAsciiSize; > 53: byte[] arr = new byte[asciisize + nonAsciiSize]; > 54: Arrays.fill(arr, (byte)'x'); // fill with latin1 `(byte) 0` is a valid UTF-8 sequence after all, so there is no need to fill the array with `'x'`. test/jdk/java/lang/String/CompactString/MaxSizeUTF16String.java line 64: > 62: int nonAsciiSize = nonAscii.length; > 63: int asciisize = size - nonAsciiSize; > 64: char[] arr = new char[asciisize + nonAsciiSize]; Same as above test/jdk/java/lang/String/CompactString/MaxSizeUTF16String.java line 65: > 63: int asciisize = size - nonAsciiSize; > 64: char[] arr = new char[asciisize + nonAsciiSize]; > 65: Arrays.fill(arr, 'x'); // fill with latin1 Same as above ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/17008#discussion_r1420993528 PR Review Comment: https://git.openjdk.org/jdk/pull/17008#discussion_r1420993636 PR Review Comment: https://git.openjdk.org/jdk/pull/17008#discussion_r1420993740 PR Review Comment: https://git.openjdk.org/jdk/pull/17008#discussion_r1420993780