summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/datetime.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-05-30 19:58:59 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-05-30 19:58:59 -0400
commit4d3482a741a5f6c7594e60430cadb0f15024cab2 (patch)
treea827d1d236bc3a59308ef3b9149afee6686f9abb /src/backend/utils/adt/datetime.c
parentdd957a5bb90b05269f61db7bd3d9785afd5eb0e5 (diff)
Expand the allowed range of timezone offsets to +/-15:59:59 from Greenwich.
We used to only allow offsets less than +/-13 hours, then it was +/14, then it was +/-15. That's still not good enough though, as per today's bug report from Patric Bechtel. This time I actually looked through the Olson timezone database to find the largest offsets used anywhere. The winners are Asia/Manila, at -15:56:00 until 1844, and America/Metlakatla, at +15:13:42 until 1867. So we'd better allow offsets less than +/-16 hours. Given the history, we are way overdue to have some greppable #define symbols controlling this, so make some ... and also remove an obsolete comment that didn't get fixed the last time. Back-patch to all supported branches.
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r--src/backend/utils/adt/datetime.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 1408d67a4a4..184c8f441b0 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -2571,9 +2571,6 @@ DecodeNumberField(int len, char *str, int fmask,
* Return 0 if okay (and set *tzp), a DTERR code if not okay.
*
* NB: this must *not* ereport on failure; see commands/variable.c.
- *
- * Note: we allow timezone offsets up to 13:59. There are places that
- * use +1300 summer time.
*/
static int
DecodeTimezone(char *str, int *tzp)
@@ -2618,7 +2615,8 @@ DecodeTimezone(char *str, int *tzp)
else
min = 0;
- if (hr < 0 || hr > 14)
+ /* Range-check the values; see notes in utils/timestamp.h */
+ if (hr < 0 || hr > MAX_TZDISP_HOUR)
return DTERR_TZDISP_OVERFLOW;
if (min < 0 || min >= 60)
return DTERR_TZDISP_OVERFLOW;