Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 25 Mar 2024 09:13:18 -0400
From: Rich Felker <dalias@...c.org>
To: Alexander Weps <exander77@...me>
Cc: musl@...ts.openwall.com
Subject: Re: Broken mktime calculations when crossing DST boundary

On Mon, Mar 25, 2024 at 12:55:28PM +0000, Alexander Weps wrote:
> > If you take your test program and switch it to initialize with
> > tm_mday=31, then do -=1 instead of +=1, you'll find that it gives
> > 2011-12-29 01:00:00 -10 as well, only now it seems like the correct,
> > expected thing to happen. Any change to "fix" the case you're
> > complaining about would necessarily break this case.
> 
> So (- day, +day):
> 
> Musl:
> 2011-12-31 01:00:00 +14
> 2011-12-29 01:00:00 -10
> 2011-12-29 01:00:00 -10
> 
> Glibc:
> 2012-01-01 01:00:00 +14
> 2011-12-31 01:00:00 +14
> 2012-01-01 01:00:00 +14
> 
> Seems like musl doesn't even interpret the initial struct tm
> correctly in that case. It is off by day.
> 
> Because December only had 30 days, 31s day after normalization is
> January 1st.

This is nonsense. December has a day 31, which you can clearly see
from the glibc output. For this particular year in this zone, with the
zone rule change, there are "only 30 days" in December, but they are
numbered 1-29 and 31, not 1-30.

What did you do that got glibc to output 2012-01-01? I guess you wrote
code to do some wacky arithmetic *after* the original code you already
had, rather than *changing* the code to start with 2011-12-31 as I
suggested to get a look at what's happening.

> > In any case, the core issue you're hitting here is that time zones are
> > HARD to work with and that there is inherent complexity that libc
> > cannot save you from. You only got lucky that what you were trying to
> > do "worked" with glibc because you were iterating days forward; if you
> > were doing reverse, it would break exactly the same way.
> 
> I am not really commenting on this, until you sort out the above
> inconsistencies.

I already have but you refuse to look.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.