avoid using INT64_MAX in double comparisons because it cannot be exactly represented as a double (bnoordhuis)

This commit is contained in:
Fabrice Bellard 2024-02-03 15:48:57 +01:00
parent 1ed38eef33
commit 6f480abbc8

View File

@ -10771,7 +10771,7 @@ static int JS_ToInt64SatFree(JSContext *ctx, int64_t *pres, JSValue val)
} else { } else {
if (d < INT64_MIN) if (d < INT64_MIN)
*pres = INT64_MIN; *pres = INT64_MIN;
else if (d > INT64_MAX) else if (d >= 0x1p63) /* must use INT64_MAX + 1 because INT64_MAX cannot be exactly represented as a double */
*pres = INT64_MAX; *pres = INT64_MAX;
else else
*pres = (int64_t)d; *pres = (int64_t)d;
@ -55350,7 +55350,8 @@ static JSValue js_atomics_wait(JSContext *ctx,
} }
if (JS_ToFloat64(ctx, &d, argv[3])) if (JS_ToFloat64(ctx, &d, argv[3]))
return JS_EXCEPTION; return JS_EXCEPTION;
if (isnan(d) || d > INT64_MAX) /* must use INT64_MAX + 1 because INT64_MAX cannot be exactly represented as a double */
if (isnan(d) || d >= 0x1p63)
timeout = INT64_MAX; timeout = INT64_MAX;
else if (d < 0) else if (d < 0)
timeout = 0; timeout = 0;