summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane2024-02-13 20:58:40 +0000
committerTom Lane2024-02-13 20:58:40 +0000
commit5ebc9c90173f32cffe373a80835f157b9ebfa3bd (patch)
tree508bf57543052db2b4d8e5ce09678f070f4ed691 /src/test
parentfbf9a7ac4d300bbadbffe11c58cb54fcbe15601f (diff)
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
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/interval.out8
-rw-r--r--src/test/regress/sql/interval.sql2
2 files changed, 10 insertions, 0 deletions
diff --git a/src/test/regress/expected/interval.out b/src/test/regress/expected/interval.out
index b79b6fcd4d7..51ae010c7ba 100644
--- a/src/test/regress/expected/interval.out
+++ b/src/test/regress/expected/interval.out
@@ -929,6 +929,14 @@ SELECT interval '1 2:03:04.5678' minute to second(2);
1 day 02:03:04.57
(1 row)
+SELECT interval '2562047788:00:54.775807' second(2); -- out of range
+ERROR: interval out of range
+LINE 1: SELECT interval '2562047788:00:54.775807' second(2);
+ ^
+SELECT interval '-2562047788:00:54.775807' second(2); -- out of range
+ERROR: interval out of range
+LINE 1: SELECT interval '-2562047788:00:54.775807' second(2);
+ ^
-- test casting to restricted precision (bug #14479)
SELECT f1, f1::INTERVAL DAY TO MINUTE AS "minutes",
(f1 + INTERVAL '1 month')::INTERVAL MONTH::INTERVAL YEAR AS "years"
diff --git a/src/test/regress/sql/interval.sql b/src/test/regress/sql/interval.sql
index 5566ad0e516..fbf6e064d66 100644
--- a/src/test/regress/sql/interval.sql
+++ b/src/test/regress/sql/interval.sql
@@ -270,6 +270,8 @@ SELECT interval '1 2:03:04.5678' hour to second(2);
SELECT interval '1 2.3456' minute to second(2);
SELECT interval '1 2:03.5678' minute to second(2);
SELECT interval '1 2:03:04.5678' minute to second(2);
+SELECT interval '2562047788:00:54.775807' second(2); -- out of range
+SELECT interval '-2562047788:00:54.775807' second(2); -- out of range
-- test casting to restricted precision (bug #14479)
SELECT f1, f1::INTERVAL DAY TO MINUTE AS "minutes",