From d19b9045c8474ada89f347d41f573aae4ef30511 Mon Sep 17 00:00:00 2001 From: Brett Okken Date: Sat, 26 Jul 2025 15:24:46 -0500 Subject: [PATCH 1/3] use counted positive values when converting latin1 to utf-8 --- src/java.base/share/classes/java/lang/String.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index eac8a1355b7f2..fe8feabb532c3 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -1284,13 +1284,18 @@ private static byte[] encodeUTF8(byte coder, byte[] val, boolean doReplace) { return encodeUTF8_UTF16(val, doReplace); } - if (!StringCoding.hasNegatives(val, 0, val.length)) { + int positives = StringCoding.countPositives(val, 0, val.length); + if (positives == val.length) { return val.clone(); } - int dp = 0; + int dp = positives; byte[] dst = StringUTF16.newBytesFor(val.length); - for (byte c : val) { + if (positives > 0) { + System.arraycopy(val, 0, dst, 0, positives); + } + for (int i=dp ; i> 6)); dst[dp++] = (byte) (0x80 | (c & 0x3f)); From 947f9182ea842d6c1aef42258eb97e6b0f2686a7 Mon Sep 17 00:00:00 2001 From: Brett Okken Date: Thu, 31 Jul 2025 13:24:50 -0500 Subject: [PATCH 2/3] whitespace --- src/java.base/share/classes/java/lang/String.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index fe8feabb532c3..58858c87c8068 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -1289,12 +1289,12 @@ private static byte[] encodeUTF8(byte coder, byte[] val, boolean doReplace) { return val.clone(); } - int dp = positives; byte[] dst = StringUTF16.newBytesFor(val.length); if (positives > 0) { System.arraycopy(val, 0, dst, 0, positives); } - for (int i=dp ; i> 6)); From 26bd9d94c0e93e3b9872dc61c1c88eb2fd709434 Mon Sep 17 00:00:00 2001 From: Brett Okken Date: Fri, 1 Aug 2025 08:12:40 -0500 Subject: [PATCH 3/3] coding conventions --- src/java.base/share/classes/java/lang/String.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index 58858c87c8068..1c3e299a075da 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -1294,7 +1294,7 @@ private static byte[] encodeUTF8(byte coder, byte[] val, boolean doReplace) { System.arraycopy(val, 0, dst, 0, positives); } int dp = positives; - for (int i=dp; i> 6));