On Fri, 26 Jun 2026 17:53:06 GMT, Justin Lu <[email protected]> wrote:
> This PR addresses an edge case where the `Locale.LanguageRange(String, > double)` constructor accepts `Double.NaN` as a weight. A `LanguageRange` > weight is specified by > https://datatracker.ietf.org/doc/html/rfc2616#section-3.9 and must be between > 0.0 and 1.0, inclusive. The existing bounds checks do not handle this case. > This change adds an explicit `Double.isNaN(weight)` check. > > The issue does not affect parsed range strings in the same way, since the > input is normalized to lower case before parsing and `"nan"` is not accepted > by `Double.parseDouble`. However, I added a test for that case as well, since > one did not previously exist. > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). I think the changes are good. src/java.base/share/classes/java/util/Locale.java line 3217: > 3215: public LanguageRange(String range, double weight) { > 3216: Objects.requireNonNull(range); > 3217: if (weight < MIN_WEIGHT || weight > MAX_WEIGHT || > Double.isNaN(weight)) { Since the constructor now throws `IllegalArgumentException` for `NaN` weights, this should also be specified in the `@throws` tag, as `NaN` does not satisfy either `NaN < MIN_WEIGHT` or `NaN > MAX_WEIGHT`. ------------- PR Review: https://git.openjdk.org/jdk/pull/31697#pullrequestreview-4581866093 PR Review Comment: https://git.openjdk.org/jdk/pull/31697#discussion_r3483403005
