Catch overflow when rounding intervals in AdjustIntervalForTypmod.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 13 Feb 2024 20:58:40 +0000 (15:58 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 13 Feb 2024 20:58:40 +0000 (15:58 -0500)
commit5ebc9c90173f32cffe373a80835f157b9ebfa3bd
tree508bf57543052db2b4d8e5ce09678f070f4ed691
parentfbf9a7ac4d300bbadbffe11c58cb54fcbe15601f
Catch overflow when rounding intervals in AdjustIntervalForTypmod.

Previously, an interval microseconds field close to INT64_MAX or
INT64_MIN could overflow, producing a result with not even the
correct sign, while being rounded to match a precision specification.

This seems worth fixing, but not worth back-patching, in part
because the ereturn() notation doesn't exist very far back.

Report and patch by Joseph Koshakow (some cosmetic mods by me)

Discussion: https://postgr.es/m/CAAvxfHfpuLgqJYzkUcher466Z1LpmE+5Sm+zc8L6zKCOQ+6TDQ@mail.gmail.com
src/backend/utils/adt/timestamp.c
src/test/regress/expected/interval.out
src/test/regress/sql/interval.sql