RFR: 8367129: Move input validation checks to Java for java.lang.StringLatin1 intrinsics

Roger Riggs rriggs at openjdk.org
Wed Feb 11 09:36:40 UTC 2026


On Mon, 15 Dec 2025 20:30:51 GMT, Volkan Yazici <vyazici at openjdk.org> wrote:

> Moves input validation checks to Java for `java.lang.StringLatin1` intrinsics. While doing so, affected `java.lang.StringUTF16` methods needed to be updated due to relaxed checks at intrinsics. The javadocs of the touched methods are extensively overhauled.

Mostly comments about new comments.
Also name scoping of VM intrinsic functions.

src/hotspot/share/classfile/vmIntrinsics.hpp line 363:

> 361:                                                                                                                         \
> 362:   do_intrinsic(_compressStringC,          java_lang_StringUTF16,  compressS_name, encodeISOArray_signature,      F_S)   \
> 363:    do_name(     compressS_name,                                  "compress0")                                           \

_compressS_name doesn't seem to follow the naming pattern.

src/java.base/share/classes/java/lang/StringLatin1.java line 112:

> 110:     }
> 111: 
> 112:     // inline_string_equals

Is there a HotSpot specific namespace qualifier that can make it easier to cross reference this?
Ditto the other hotspot names below.

src/java.base/share/classes/java/lang/StringLatin1.java line 207:

> 205: 
> 206:     /**
> 207:      * Lexicographically compares a Latin-1 string sub-range to a UTF-16

It would be more specific to say it compares a "prefix" since the start is always 0.

src/java.base/share/classes/java/lang/StringUTF16.java line 398:

> 396: 
> 397:     /**
> 398:      * Exhaustively copies Latin-1 characters from a {@code char} array

The word Exhaustively does not fit here because it stops copying for > 0xff.
Perhaps:   "Copies the prefix of Latin-1 characters".

src/java.base/share/classes/java/lang/StringUTF16.java line 457:

> 455:         Objects.requireNonNull(src);
> 456:         checkBoundsOffCount(srcOff, len, src);
> 457:         String.checkBoundsOffCount(dstOff, len, dst.length);    // Implicit null check on `dst`

This bouncing around between source files for methods of the same name `checkBoundsOffCout` is bound to confuse the reader.
Be consistent, either now or later, use the local one in this file or remove the utility method.

src/java.base/share/classes/java/lang/StringUTF16.java line 603:

> 601: 
> 602:     /**
> 603:      * Lexicographically compares a UTF-16 string sub-range to a Latin-1 one as

It isn't a full sub-range, the start index is 0, use prefix instead.

src/java.base/share/classes/java/lang/StringUTF16.java line 950:

> 948:     }
> 949: 
> 950: 

Extra blank line.

-------------

PR Review: https://git.openjdk.org/jdk/pull/28832#pullrequestreview-3779872520
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2789222662
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2788770299
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2788844019
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2789099768
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2789136344
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2789162215
PR Review Comment: https://git.openjdk.org/jdk/pull/28832#discussion_r2789185291


More information about the core-libs-dev mailing list