[jdk17u-dev] RFR: 8320570: NegativeArraySizeException decoding >1G UTF8 bytes with non-ascii characters [v2]
Amos Shi
ashi at openjdk.org
Thu Mar 14 08:10:10 UTC 2024
> 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
>
> Processor 12th Gen Intel(R) Core(TM) i7-12800H 2.40 GHz
> Installed RAM 64.0 GB (63.7 GB usable)
> System type 64-bit operating system, x64-ba...
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
-------------
Changes:
- all: https://git.openjdk.org/jdk17u-dev/pull/2279/files
- new: https://git.openjdk.org/jdk17u-dev/pull/2279/files/2b4329e4..0bf1e5f0
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk17u-dev&pr=2279&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk17u-dev&pr=2279&range=00-01
Stats: 1 line in 1 file changed: 1 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk17u-dev/pull/2279.diff
Fetch: git fetch https://git.openjdk.org/jdk17u-dev.git pull/2279/head:pull/2279
PR: https://git.openjdk.org/jdk17u-dev/pull/2279
More information about the jdk-updates-dev
mailing list