RFR: 8074032: Instant.ofEpochMilli(millis).toEpochMilli() can throw arithmetic overflow in toEpochMilli()
Stephen Colebourne
scolebourne at joda.org
Fri Feb 27 16:41:31 UTC 2015
Looks good to me.
thanks
Stephen
On 27 February 2015 at 16:25, Daniel Fuchs <daniel.fuchs at oracle.com> wrote:
> Hi,
>
> Please find below a patch for:
>
> 8074032: Instant.ofEpochMilli(millis).toEpochMilli() can
> throw arithmetic overflow in toEpochMilli()
>
> http://cr.openjdk.java.net/~dfuchs/webrev_8074032/webrev.00/
>
> The issue is that when converting milliseconds to seconds + nanos
> Instant.ofEpochMilli() uses floorDiv and floorMod, as it should.
> This means that for negative values of 'millis' then seconds will
> be millis/1000 - 1, and nanos will be positive.
>
> When converting back to epoch millis, if multiplyExact is used
> without precaution, then (millis/1000 -1) * 1000 may not fit in
> a long. The solution is thus to compute ((millis/1000 -1) +1) * 1000
> instead and then add (nanos - 1000) to the result.
>
>
> Note: this issue is causing some JCK tests that call
> LogRecord.setMillis(Long.MIN_VALUE) to fail.
>
> best regards,
>
> -- daniel
More information about the core-libs-dev
mailing list