mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Fix overflow check in tm2timestamp (this time for sure).
I fixed this code back in commit 841b4a2d5, but didn't think carefully enough about the behavior near zero, which meant it improperly rejected 1999-12-31 24:00:00. Per report from Magnus Hagander.
This commit is contained in:
parent
d4f4bdf23a
commit
fa852303f0
@ -1646,8 +1646,9 @@ tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *result)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* check for just-barely overflow (okay except time-of-day wraps) */
|
/* check for just-barely overflow (okay except time-of-day wraps) */
|
||||||
if ((*result < 0 && date >= 0) ||
|
/* caution: we want to allow 1999-12-31 24:00:00 */
|
||||||
(*result >= 0 && date < 0))
|
if ((*result < 0 && date > 0) ||
|
||||||
|
(*result > 0 && date < -1))
|
||||||
{
|
{
|
||||||
*result = 0; /* keep compiler quiet */
|
*result = 0; /* keep compiler quiet */
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -76,8 +76,9 @@ tm2timestamp(struct tm * tm, fsec_t fsec, int *tzp, timestamp * result)
|
|||||||
if ((*result - time) / USECS_PER_DAY != dDate)
|
if ((*result - time) / USECS_PER_DAY != dDate)
|
||||||
return -1;
|
return -1;
|
||||||
/* check for just-barely overflow (okay except time-of-day wraps) */
|
/* check for just-barely overflow (okay except time-of-day wraps) */
|
||||||
if ((*result < 0 && dDate >= 0) ||
|
/* caution: we want to allow 1999-12-31 24:00:00 */
|
||||||
(*result >= 0 && dDate < 0))
|
if ((*result < 0 && dDate > 0) ||
|
||||||
|
(*result > 0 && dDate < -1))
|
||||||
return -1;
|
return -1;
|
||||||
#else
|
#else
|
||||||
*result = dDate * SECS_PER_DAY + time;
|
*result = dDate * SECS_PER_DAY + time;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user