glibc/time
Hans-Peter Nilsson 85b24f9694 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>
(cherry picked from commit c36f64aa6d)
2022-01-07 10:20:58 +01:00
..
bits/types y2038: Add __USE_TIME_BITS64 support for struct timespec 2021-06-15 10:42:11 -03:00
sys y2038: Add support for 64-bit time on legacy ABIs 2021-06-15 10:42:11 -03:00
adjtime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
alt_digit.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
asctime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
bug-asctime_r.c [BZ #1468] 2005-10-14 17:20:58 +00:00
bug-asctime.c [BZ #1460] 2005-10-14 15:17:40 +00:00
bug-getdate1.c support: Introduce new subdirectory for test infrastructure 2016-12-09 08:18:27 +01:00
bug-mktime1.c [BZ #2821] 2006-09-09 16:56:29 +00:00
bug-mktime4.c mktime: new test for mktime failure 2018-11-15 22:59:33 +01:00
clock_getcpuclockid.c Support for multiple versions in versioned_symbol, compat_symbol 2021-03-25 12:33:02 +01:00
clock_getres.c Add C2X timespec_getres 2021-05-17 20:55:21 +00:00
clock_gettime.c Support for multiple versions in versioned_symbol, compat_symbol 2021-03-25 12:33:02 +01:00
clock_nanosleep.c Support for multiple versions in versioned_symbol, compat_symbol 2021-03-25 12:33:02 +01:00
clock_settime.c Support for multiple versions in versioned_symbol, compat_symbol 2021-03-25 12:33:02 +01:00
clock.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
clocktest.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
ctime_r.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
ctime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
datemsk * time/Makefile (tst-getdate-ENV): Add TZDIR to environment. 2001-07-18 09:43:36 +00:00
Depend * time/Makefile (tst-getdate-ENV): Add TZDIR to environment. 2001-07-18 09:43:36 +00:00
difftime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
dysize.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
era.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
ftime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
getdate.c time: Add 64-bit time support for getdate 2021-06-15 10:42:11 -03:00
getitimer.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
gettimeofday.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
gmtime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
lc-time-cleanup.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
localtime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
Makefile Linux: Cleanups after librt move 2021-06-28 09:51:01 +02:00
mktime-internal.h Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
mktime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
offtime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
setitimer.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
settimeofday.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
settimezone.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
stime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
strftime_l.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
strftime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
strptime_l.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
strptime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
test_time.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
time.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
time.h y2038: Add support for 64-bit time on legacy ABIs 2021-06-15 10:42:11 -03:00
timegm.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
timespec_get.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
timespec_getres.c Add C2X timespec_getres 2021-05-17 20:55:21 +00:00
tst_wcsftime.c Don't use the argument to time. 2019-08-21 08:26:36 -04:00
tst-adjtime-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-adjtime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-clock2-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-clock2.c Finish move of clock_* functions to libc. [BZ #24959] 2019-09-04 14:39:38 +02:00
tst-clock_nanosleep-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-clock_nanosleep.c linux: Only use 64-bit syscall if required for clock_nanosleep 2021-06-22 12:09:52 -03:00
tst-clock_settime-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-clock_settime.c tst: Add test for clock_settime 2021-03-08 22:41:34 +01:00
tst-clock-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-clock.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-cpuclock1-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-cpuclock1.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-ctime-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-ctime.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-difftime-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-difftime.c tst: Provide test for difftime 2021-02-16 20:37:27 +01:00
tst-ftime_l.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-ftime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-getdate.c time: Add 64-bit time support for getdate 2021-06-15 10:42:11 -03:00
tst-gmtime-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-gmtime.c time: Add gmtime/gmtime_r tests 2021-04-15 11:32:38 -03:00
tst-itimer-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-itimer.c time: Add getitimer and setitimer basic tests 2021-04-15 11:27:35 -03:00
tst-mktime2.c time/tst-mktime2: Improve test error reporting 2018-10-23 11:25:05 +02:00
tst-mktime3.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-mktime4-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-mktime4.c tst: time: Provide Y2038 tests for mktime (tst-mktime4.c) 2021-02-16 20:41:45 +01:00
tst-mktime.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-posixtz.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-settimeofday-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-settimeofday.c tst: Add test for settimeofday 2021-03-08 22:41:41 +01:00
tst-strftime2.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-strftime3.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-strftime.c Fix BZ #18985 -- out of range data to strftime() causes a segfault 2015-09-26 13:27:48 -07:00
tst-strptime2.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-strptime3.c time: ensure failing strptime() tests are reported correctly 2015-03-06 06:06:26 -05:00
tst-strptime-whitespace.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-strptime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-timegm-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-timegm.c time: Add timegm/timelocal basic tests 2021-04-15 11:32:39 -03:00
tst-timespec_get-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-timespec_get.c time: Add basic timespec_get tests 2021-04-15 11:32:40 -03:00
tst-timespec_getres-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-timespec_getres.c Add C2X timespec_getres 2021-05-17 20:55:21 +00:00
tst-tzname.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
tst-y2039-time64.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tst-y2039.c y2038: Add test coverage 2021-06-15 10:42:11 -03:00
tzfile.c timezone: handle truncated timezones from tzcode-2021d and later (BZ #28707) 2022-01-07 10:20:58 +01:00
tzset.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
Versions Add C2X timespec_getres 2021-05-17 20:55:21 +00:00
wcsftime_l.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00
wcsftime.c Update copyright dates with scripts/update-copyrights 2021-01-02 12:17:34 -08:00