Avoid integer overflow hazard in interval_time().
authorDean Rasheed <dean.a.rasheed@gmail.com>
Thu, 9 Nov 2023 12:10:14 +0000 (12:10 +0000)
committerDean Rasheed <dean.a.rasheed@gmail.com>
Thu, 9 Nov 2023 12:10:14 +0000 (12:10 +0000)
commit3850d4dec1d91c4fdce274f42986840444d5593e
tree0a9284641c901c15d11fe5329dd3530369a9ddac
parenta4f7d33a904fcd4da7a12d249416dd2c5c5f2c1c
Avoid integer overflow hazard in interval_time().

When casting an interval to a time, the original code suffered from
64-bit integer overflow for inputs with a sufficiently large negative
"time" field, leading to bogus results.

Fix by rewriting the algorithm in a simpler form, that more obviously
cannot overflow. While at it, improve the test coverage to include
negative interval inputs.

Discussion: https://postgr.es/m/CAEZATCXoUKHkcuq4q63hkiPsKZJd0kZWzgKtU%2BNT0aU4wbf_Pw%40mail.gmail.com
src/backend/utils/adt/date.c
src/test/regress/expected/horology.out
src/test/regress/sql/horology.sql