diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index b9c26b6854..7456808a42 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -3351,14 +3351,16 @@ interval_mul(PG_FUNCTION_ARGS) result = (Interval *) palloc(sizeof(Interval)); result_double = span->month * factor; - if (result_double > INT_MAX || result_double < INT_MIN) + if (isnan(result_double) || + result_double > INT_MAX || result_double < INT_MIN) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("interval out of range"))); result->month = (int32) result_double; result_double = span->day * factor; - if (result_double > INT_MAX || result_double < INT_MIN) + if (isnan(result_double) || + result_double > INT_MAX || result_double < INT_MIN) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("interval out of range")));