diff options
Diffstat (limited to 'timezone-handle-truncated-timezones-from-tzcode-2021.patch')
-rw-r--r-- | timezone-handle-truncated-timezones-from-tzcode-2021.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/timezone-handle-truncated-timezones-from-tzcode-2021.patch b/timezone-handle-truncated-timezones-from-tzcode-2021.patch new file mode 100644 index 0000000..10ef9e8 --- /dev/null +++ b/timezone-handle-truncated-timezones-from-tzcode-2021.patch @@ -0,0 +1,57 @@ +From c36f64aa6dff13b12a1e03a185e75a50fa9f6a4c Mon Sep 17 00:00:00 2001 +From: Hans-Peter Nilsson <hp@axis.com> +Date: Fri, 17 Dec 2021 21:38:00 +0100 +Subject: [PATCH] timezone: handle truncated timezones from tzcode-2021d and + later (BZ #28707) + +When using a timezone file with a truncated starting time, +generated by the zic in IANA tzcode-2021d a.k.a. tzlib-2021d +(also in tzlib-2021e; current as of this writing), glibc +asserts in __tzfile_read (on e.g. tzset() for this file) and +you may find lines matching "tzfile.c:435: __tzfile_read: +Assertion `num_types == 1' failed" in your syslog. + +One example of such a file is the tzfile for Asuncion +generated by tzlib-2021e as follows, using the tzlib-2021e zic: +"zic -d DEST -r @1546300800 -L /dev/null -b slim +SOURCE/southamerica". Note that in its type 2 header, it has +two entries in its "time-types" array (types), but only one +entry in its "transition types" array (type_idxs). + +This is valid and expected already in the published RFC8536, and +not even frowned upon: "Local time for timestamps before the +first transition is specified by the first time type (time type +0)" ... "every nonzero local time type index SHOULD appear at +least once in the transition type array". Note the "nonzero ... +index". Until the 2021d zic, index 0 has been shared by the +first valid transition but with 2021d it's separate, set apart +as a placeholder and only "implicitly" indexed. (A draft update +of the RFC mandates that the entry at index 0 is a placeholder +in this case, hence can no longer be shared.) + + * time/tzfile.c (__tzfile_read): Don't assert when no transitions + are found. + +Co-authored-by: Christopher Wong <Christopher.Wong@axis.com> +--- + time/tzfile.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/time/tzfile.c b/time/tzfile.c +index 190a777..8668392 100644 +--- a/time/tzfile.c ++++ b/time/tzfile.c +@@ -431,8 +431,8 @@ __tzfile_read (const char *file, size_t extra, char **extrap) + if (__tzname[0] == NULL) + { + /* This should only happen if there are no transition rules. +- In this case there should be only one single type. */ +- assert (num_types == 1); ++ In this case there's usually only one single type, unless ++ e.g. the data file has a truncated time-range. */ + __tzname[0] = __tzstring (zone_names); + } + if (__tzname[1] == NULL) +-- +1.8.3.1 + |