Skip to content

Commit 124331b

Browse files
committed
Reject out-of-range numeric timezone specifications.
In commit 631dc39, we started to handle simple numeric timezone offsets via the zic library instead of the old CTimeZone/HasCTZSet kluge. However, we overlooked the fact that the zic code will reject UTC offsets exceeding a week (which seems a bit arbitrary, but not because it's too tight ...). This led to possibly setting session_timezone to NULL, which results in crashes in most timezone-related operations as of 9.4, and crashes in a small number of places even before that. So check for NULL return from pg_tzset_offset() and report an appropriate error message. Per bug #11014 from Duncan Gillis. Back-patch to all supported branches, like the previous patch. (Unfortunately, as of today that no longer includes 8.4.)
1 parent 972a21d commit 124331b

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

src/backend/commands/variable.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,13 @@ check_timezone(char **newval, void **extra, GucSource source)
388388
}
389389
}
390390

391+
/* Test for failure in pg_tzset_offset, which we assume is out-of-range */
392+
if (!myextra.session_timezone)
393+
{
394+
GUC_check_errdetail("UTC timezone offset is out of range.");
395+
return false;
396+
}
397+
391398
/*
392399
* Prepare the canonical string to return. GUC wants it malloc'd.
393400
*

src/timezone/pgtz.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,6 +1333,9 @@ pg_tzset(const char *name)
13331333
* The GMT offset is specified in seconds, positive values meaning west of
13341334
* Greenwich (ie, POSIX not ISO sign convention). However, we use ISO
13351335
* sign convention in the displayable abbreviation for the zone.
1336+
*
1337+
* Caution: this can fail (return NULL) if the specified offset is outside
1338+
* the range allowed by the zic library.
13361339
*/
13371340
pg_tz *
13381341
pg_tzset_offset(long gmtoffset)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy