public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] timezone: handle truncated timezones from tzcode-2021d and later (BZ #28707)
@ 2021-12-30 11:16 Adhemerval Zanella
  0 siblings, 0 replies; only message in thread
From: Adhemerval Zanella @ 2021-12-30 11:16 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c36f64aa6dff13b12a1e03a185e75a50fa9f6a4c

commit c36f64aa6dff13b12a1e03a185e75a50fa9f6a4c
Author: Hans-Peter Nilsson <hp@axis.com>
Date:   Fri Dec 17 21:38:00 2021 +0100

    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>

Diff:
---
 time/tzfile.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/time/tzfile.c b/time/tzfile.c
index 190a777152..8668392ad3 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)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-30 11:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-30 11:16 [glibc] timezone: handle truncated timezones from tzcode-2021d and later (BZ #28707) Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).