Skip to content

Commit 6412f3e

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 212825f commit 6412f3e

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
@@ -349,6 +349,13 @@ check_timezone(char **newval, void **extra, GucSource source)
349349
}
350350
}
351351

352+
/* Test for failure in pg_tzset_offset, which we assume is out-of-range */
353+
if (!new_tz)
354+
{
355+
GUC_check_errdetail("UTC timezone offset is out of range.");
356+
return false;
357+
}
358+
352359
/*
353360
* Pass back data for assign_timezone to use
354361
*/

src/timezone/pgtz.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,9 @@ pg_tzset(const char *name)
296296
* The GMT offset is specified in seconds, positive values meaning west of
297297
* Greenwich (ie, POSIX not ISO sign convention). However, we use ISO
298298
* sign convention in the displayable abbreviation for the zone.
299+
*
300+
* Caution: this can fail (return NULL) if the specified offset is outside
301+
* the range allowed by the zic library.
299302
*/
300303
pg_tz *
301304
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