always reset DST rules during tzset
authorBenjamin Peterson <benjamin@python.org>
Sat, 15 Sep 2018 17:05:24 +0000 (10:05 -0700)
committerRich Felker <dalias@aerifal.cx>
Sat, 15 Sep 2018 17:22:12 +0000 (13:22 -0400)
do_tzset() did't always reset the DST transition rules r0 and r1. That
means the rules from older TZ settings could leak into newer ones.

src/time/__tz.c

index 51e665141b53209ae645be010cc636b5a69aeaa1..185642e8828bd00a24b622043f1e5117cb5eb94d 100644 (file)
@@ -130,6 +130,8 @@ static void do_tzset()
 
        if (old_tz && !strcmp(s, old_tz)) return;
 
+       for (i=0; i<5; i++) r0[i] = r1[i] = 0;
+
        if (zi) __munmap((void *)zi, map_size);
 
        /* Cache the old value of TZ to check if it has changed. Avoid
@@ -194,7 +196,6 @@ static void do_tzset()
                        const unsigned char *p;
                        __tzname[0] = __tzname[1] = 0;
                        __daylight = __timezone = dst_off = 0;
-                       for (i=0; i<5; i++) r0[i] = r1[i] = 0;
                        for (p=types; p<abbrevs; p+=6) {
                                if (!p[4] && !__tzname[0]) {
                                        __tzname[0] = (char *)abbrevs + p[5];