aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-07-22 19:55:50 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-07-22 19:55:50 +0000
commit4749e914ae25f7b23b1db04a739be542a29bd580 (patch)
tree450b68997049c71a5ce23ca09fd55081597a1146
parent37c443eefd3cac0778c915aaecdceda1a5e1d800 (diff)
downloadpostgresql-4749e914ae25f7b23b1db04a739be542a29bd580.tar.gz
postgresql-4749e914ae25f7b23b1db04a739be542a29bd580.zip
Fix insufficient check for overflow in tm2abstime(), per report from jw.
-rw-r--r--src/backend/utils/adt/nabstime.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index 1359da52a51..d4d9d25e48d 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.140 2005/07/22 03:46:33 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.141 2005/07/22 19:55:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -29,7 +29,7 @@
#include "utils/builtins.h"
#include "utils/nabstime.h"
-#define MIN_DAYNUM -24856 /* December 13, 1901 */
+#define MIN_DAYNUM (-24856) /* December 13, 1901 */
#define MAX_DAYNUM 24854 /* January 18, 2038 */
#define INVALID_RELTIME_STR "Undefined RelTime"
@@ -201,9 +201,12 @@ tm2abstime(struct pg_tm *tm, int tz)
/* convert to seconds */
sec = tm->tm_sec + tz + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
- /* check for overflow */
- if ((day == MAX_DAYNUM && sec < 0) ||
- (day == MIN_DAYNUM && sec > 0))
+ /*
+ * check for overflow. We need a little slop here because the H/M/S plus
+ * TZ offset could add up to more than 1 day.
+ */
+ if ((day >= MAX_DAYNUM-10 && sec < 0) ||
+ (day <= MIN_DAYNUM+10 && sec > 0))
return INVALID_ABSTIME;
/* check for reserved values (e.g. "current" on edge of usual range */