]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix bogus timetz_zone() results for DYNTZ abbreviations.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Sep 2021 15:29:52 +0000 (11:29 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Sep 2021 15:29:52 +0000 (11:29 -0400)
timetz_zone() delivered completely wrong answers if the zone was
specified by a dynamic TZ abbreviation, because it failed to account
for the difference between the POSIX conventions for field values in
struct pg_tm and the conventions used in PG-specific datetime code.

As a stopgap fix, just adjust the tm_year and tm_mon fields to match
PG conventions.  This is fixed in a different way in HEAD (388e71af8)
but I don't want to back-patch the change of reference point.

Discussion: https://postgr.es/m/CAJ7c6TOMG8zSNEZtCn5SPe+cCk3Lfxb71ZaQwT2F4T7PJ_t=KA@mail.gmail.com

src/backend/utils/adt/date.c

index 0bea16cb671ac90461627ed11ef7441c56bd32a9..8690860cb726d2918163eb8113828c0358528a6a 100644 (file)
@@ -3073,6 +3073,8 @@ timetz_zone(PG_FUNCTION_ARGS)
                struct pg_tm *tm;
 
                tm = pg_localtime(&now, tzp);
+               tm->tm_year += 1900;    /* adjust to PG conventions */
+               tm->tm_mon += 1;
                tz = DetermineTimeZoneAbbrevOffset(tm, tzname, tzp);
        }
        else