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

Reply via email to