[jdk17u-dev] RFR: 8320570: NegativeArraySizeException decoding >1G UTF8 bytes with non-ascii characters [v2]
Paul Hohensee
phh at openjdk.org
Fri Mar 15 14:36:57 UTC 2024
On Thu, 14 Mar 2024 08:10:10 GMT, Amos Shi <ashi at openjdk.org> wrote:
>> Backport of [JDK-8320570](https://bugs.openjdk.org/browse/JDK-8320570)
>> - `NegativeSize.java` - Clean backport
>> - `String.java` - 3 sections change are unclean, the rest are clean. Details as bellow.
>> - This PR contains 2 commits
>> - The commit 1: is a clean backport part
>> - The commit 2: is a manual fix of the following 3 sections,
>> - Replace all `new byte[length << 1]` as `StringUTF16.newBytesFor(length)`
>>
>>
>> @@ -592,7 +592,7 @@
>> this.coder = LATIN1;
>> return;
>> }
>> - byte[] utf16 = new byte[length << 1];
>> + byte[] utf16 = StringUTF16.newBytesFor(length);
>> StringLatin1.inflate(latin1, 0, utf16, 0, dp);
>> dp = decodeUTF8_UTF16(latin1, sp, length, utf16, dp, true);
>> if (dp != length) {
>>
>>
>>
>> @@ -601,7 +601,7 @@
>> this.value = utf16;
>> this.coder = UTF16;
>> } else { // !COMPACT_STRINGS
>> - byte[] dst = new byte[length << 1];
>> + byte[] dst = StringUTF16.newBytesFor(length);
>> int dp = decodeUTF8_UTF16(bytes, offset, offset + length, dst, 0, true);
>> if (dp != length) {
>> dst = Arrays.copyOf(dst, dp << 1);
>>
>>
>>
>> @@ -730,15 +730,15 @@
>> return new String(dst, LATIN1);
>> }
>> if (dp == 0) {
>> - dst = new byte[length << 1];
>> + dst = StringUTF16.newBytesFor(length);
>> } else {
>> - byte[] buf = new byte[length << 1];
>> + byte[] buf = StringUTF16.newBytesFor(length);
>> StringLatin1.inflate(dst, 0, buf, 0, dp);
>> dst = buf;
>> }
>> dp = decodeUTF8_UTF16(bytes, offset, sl, dst, dp, false);
>> } else { // !COMPACT_STRINGS
>> - dst = new byte[length << 1];
>> + dst = StringUTF16.newBytesFor(length);
>> dp = decodeUTF8_UTF16(bytes, offset, offset + length, dst, 0, false);
>> }
>> if (dp != length) {
>>
>>
>> - 💚 So this PR can be considered as `semantics clean`
>>
>>
>> Testing
>> - Local:
>> - Passed on MacOS M1 laptop
>> - `test/jdk/java/lang/String/CompactString/NegativeSize.java` - Test results: passed: 1
>> - Passed on Windows 11
>> - `test/jdk/java/lang/String/CompactString/NegativeSize.java` - Test results: passed: 1
>>
>> Process...
>
> Amos Shi has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix compile error: unmappable character for encoding windows-1252
Marked as reviewed by phh (Reviewer).
-------------
PR Review: https://git.openjdk.org/jdk17u-dev/pull/2279#pullrequestreview-1939107886
More information about the jdk-updates-dev
mailing list