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:
@ -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();
|
||||
|
||||
|
Reference in New Issue
Block a user