1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-26 12:21:12 +03:00

Disallow infinite endpoints in generate_series() for timestamps.

Such cases will lead to infinite loops, so they're of no practical
value.  The numeric variant of generate_series() already threw error
for this, so borrow its message wording.

Per report from Richard Wesley.  Back-patch to all supported branches.

Discussion: https://postgr.es/m/91B44E7B-68D5-448F-95C8-B4B3B0F5DEAF@duckdblabs.com
This commit is contained in:
Tom Lane
2022-04-20 18:08:15 -04:00
parent d2d3547979
commit eafdf9de06
5 changed files with 156 additions and 0 deletions

View File

@ -5778,6 +5778,20 @@ generate_series_timestamp(PG_FUNCTION_ARGS)
MemoryContext oldcontext;
Interval interval_zero;
/* Reject infinities in start and stop values */
if (TIMESTAMP_IS_NOBEGIN(start) ||
TIMESTAMP_IS_NOEND(start))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("start value cannot be infinity")));
if (TIMESTAMP_IS_NOBEGIN(finish) ||
TIMESTAMP_IS_NOEND(finish))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("stop value cannot be infinity")));
/* Interval doesn't (currently) have infinity, so nothing to check */
/* create a function context for cross-call persistence */
funcctx = SRF_FIRSTCALL_INIT();
@ -5858,6 +5872,20 @@ generate_series_timestamptz(PG_FUNCTION_ARGS)
MemoryContext oldcontext;
Interval interval_zero;
/* Reject infinities in start and stop values */
if (TIMESTAMP_IS_NOBEGIN(start) ||
TIMESTAMP_IS_NOEND(start))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("start value cannot be infinity")));
if (TIMESTAMP_IS_NOBEGIN(finish) ||
TIMESTAMP_IS_NOEND(finish))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("stop value cannot be infinity")));
/* Interval doesn't (currently) have infinity, so nothing to check */
/* create a function context for cross-call persistence */
funcctx = SRF_FIRSTCALL_INIT();