From ba326276f79cf847fd1127d0edaf7d7f99a18c8e Mon Sep 17 00:00:00 2001 From: Nick Babadzhanian Date: Wed, 15 Feb 2023 08:42:00 +0100 Subject: [PATCH] Fix silent interval overflow --- src/backend/utils/adt/timestamp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 47e059a409..88fb4160cb 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -2713,7 +2713,11 @@ timestamp_mi(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("cannot subtract infinite timestamps"))); - result->time = dt1 - dt2; + /* Subtract dt1 and dt2 with overflow detection */ + if (unlikely(pg_sub_s64_overflow(dt1, dt2, &result->time))) + ereport(ERROR, + (errcode(ERRCODE_INTERVAL_FIELD_OVERFLOW), + errmsg("interval field out of range"))); result->month = 0; result->day = 0; -- 2.39.1