diff options
| author | Tom Lane | 2013-03-04 20:13:31 +0000 |
|---|---|---|
| committer | Tom Lane | 2013-03-04 20:13:31 +0000 |
| commit | 542eeba26992305d872be699158cb3ab1c2be6e6 (patch) | |
| tree | db767a4a7d1e841003d5aa90380c38950bd47ba7 /src/interfaces | |
| parent | 0ea1f6e98fc84f1c5f66cc6355f6e20582295e81 (diff) | |
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.
Diffstat (limited to 'src/interfaces')
| -rw-r--r-- | src/interfaces/ecpg/pgtypeslib/timestamp.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/interfaces/ecpg/pgtypeslib/timestamp.c b/src/interfaces/ecpg/pgtypeslib/timestamp.c index 36f101bb1c..cccd2814d2 100644 --- a/src/interfaces/ecpg/pgtypeslib/timestamp.c +++ b/src/interfaces/ecpg/pgtypeslib/timestamp.c @@ -76,8 +76,9 @@ tm2timestamp(struct tm * tm, fsec_t fsec, int *tzp, timestamp * result) if ((*result - time) / USECS_PER_DAY != dDate) return -1; /* check for just-barely overflow (okay except time-of-day wraps) */ - if ((*result < 0 && dDate >= 0) || - (*result >= 0 && dDate < 0)) + /* caution: we want to allow 1999-12-31 24:00:00 */ + if ((*result < 0 && dDate > 0) || + (*result > 0 && dDate < -1)) return -1; #else *result = dDate * SECS_PER_DAY + time; |
