RFR: 8368528: HttpClient.Builder.connectTimeout should accept arbitrarily large values

Volkan Yazici vyazici at openjdk.org
Fri Oct 24 12:21:27 UTC 2025


On Fri, 24 Oct 2025 12:10:38 GMT, Volkan Yazici <vyazici at openjdk.org> wrote:

> Introduce necessary fixes to address exceptions thrown when excessive `Duration`s are provided to `Duration`-accepting `HttpClient` public APIs.

src/java.net.http/share/classes/jdk/internal/net/http/HttpQuicConnection.java line 1:

> 1: /*

Addresses following failures:

    Caused by: java.lang.ArithmeticException: long overflow
       at java.base/java.lang.Math.multiplyExact(Math.java:1036)
       at java.base/java.lang.Math.multiplyExact(Math.java:1012)
       at java.base/java.time.Duration.toMillis(Duration.java:1243)
       at java.net.http/jdk.internal.net.http.HttpQuicConnection$H3QuicConnectionImpl.connectAsync(HttpQuicConnection.java:509)

src/java.net.http/share/classes/jdk/internal/net/http/common/Deadline.java line 1:

> 1: /*

Addresses two following failures:

    Caused by: java.time.DateTimeException: Instant exceeds minimum or maximum instant
       at java.base/java.time.Instant.plusSeconds(Instant.java:883)
       at java.base/java.time.Instant.plus(Instant.java:856)
       at java.base/java.time.Instant.plus(Instant.java:209)
       at java.base/java.time.Duration.addTo(Duration.java:1120)
       at java.base/java.time.Instant.plus(Instant.java:788)
       at java.net.http/jdk.internal.net.http.common.Deadline.plus(Deadline.java:177)

    Caused by: java.lang.ArithmeticException: long overflow
       at java.base/java.lang.Math.multiplyExact(Math.java:1036)
       at java.base/java.time.Instant.millisUntil(Instant.java:1207)
       at java.base/java.time.Instant.until(Instant.java:1153)
       at java.net.http/jdk.internal.net.http.common.Deadline.until(Deadline.java:200)

test/jdk/java/net/httpclient/DurationOverflowTest.java line 257:

> 255:             Duration.MAX,
> 256:             // This triggers different exceptions than the ones triggered by `Duration.MAX`
> 257:             Duration.ofMillis(Long.MAX_VALUE));

The reproduction by the reporter provides 3 `Duration` values triggering failures. Above two is sufficient to reproduce all 3 exceptions shared earlier:

1. `plus(Deadline.java:177)`
2. `until(Deadline.java:200)`
3. `connectAsync(HttpQuicConnection.java:509)`

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27973#discussion_r2460116503
PR Review Comment: https://git.openjdk.org/jdk/pull/27973#discussion_r2460121100
PR Review Comment: https://git.openjdk.org/jdk/pull/27973#discussion_r2460135873


More information about the net-dev mailing list