mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: [musl] Re: strftime %Z behavior with manually populated struct tm
Date: Wed, 12 Aug 2020 11:17:47 -0400	[thread overview]
Message-ID: <20200812151747.GN3265@brightrain.aerifal.cx> (raw)
In-Reply-To: <CAF+90c8MDdtAZEFX5Ga-Sds1HwnwRDqc6g3ySY8f_E-0HxhujA@mail.gmail.com>

On Wed, Aug 12, 2020 at 02:57:08PM +0200, Nikita Popov wrote:
> > I haven't checked, but I believe most implementations just print the
> > zone name from the current timezone, using tm_isdst to decide whether
> > to print the standard or daylight version of the name. This is
> > insufficient with zoneinfo for zones where the name changed over time,
> > where it would print the wrong name for historical times. So instead
> > we support printing any one of the zone names from the current zone,
> > if the tm_zone member points to one of them, and blank otherwise.
> 
> You are right. I was under the impression that glibc uses tm_zone, but
> double checking the implementation right now, it doesn't. So the behavioral
> discrepancy here comes from the fact that musl checks tm_zone at all, not
> the other way around. Sorry for looking in the completely wrong direction
> here.
> 
> > I think you have the wrong commit link; that one does not look
> > related. If you have the real one I'd be interested in seeing what
> > they did.
> 
> Indeed, I meant to link to
> https://github.com/python/cpython/commit/5633c4f342d957df2ef0d67b9bfb472a0d28a76b.
> What Python does is to retrieve musl's string for UTC using gmtime_r, as
> well as trying to match against the current tzname.
> 
> > I think if applications want to use zones other than the actual
> > configured zone with strftime, they need to just do something like
> > expand the %Z themselves with the string they want before calling
> > strftime (note: this requires quoting any % in the name).
> 
> With your explanation in mind, explicitly expanding %Z does seem like a
> good approach. I'll consider doing that.
> 
> > I looked
> > hard for a better solution that wouldn't crash valid applications, and
> > couldn't find one at the time.
> 
> Possibly it would make sense to fall back to using the current tzname if
> the pointer given in tm_zone is invalid, rather than an empty string?

This might make sense. I was thinking from a standpoint of most
reasonable behavior for an uninitialized field, but but can always
give junk anyway (if you happen to have the exact wrong pointer value
that points to the current timezone's string area) so it's really not
useful to care about that case except for it not crashing. Using
tm_isdst and __timezone if the caller zeros the field would still be
useful potentially.

Rich

      parent reply	other threads:[~2020-08-12 15:18 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-10 13:31 [musl] " Nikita Popov
2020-08-10 16:53 ` Rich Felker
2020-08-12 12:57 ` [musl] " Nikita Popov
2020-08-12 14:05   ` Nikita Popov
2020-08-12 15:17   ` Rich Felker [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200812151747.GN3265@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).