Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.BSM.4.64L.2403242340310.10180@herc.mirbsd.org>
Date: Sun, 24 Mar 2024 23:51:26 +0000 (UTC)
From: Thorsten Glaser <tg@...bsd.de>
To: musl@...ts.openwall.com
Subject: Re: Broken mktime calculations when crossing DST boundary

Alexander Weps dixit:

>You are describing the musl behavior, more specifically what I see in mktime & __tm_to_secs.
>I don't think this is correct behavior.

This is what POSIX (Issue 8) and AFAIR also the next ISO C standard
mandate, though:

1.–6.	struct tm is normalised from seconds or minutes up to year
7.	struct tm is converted to time_t (wrongly written down as
	“the number of seconds since the epoch” as it omits leap
	seconds)
8.	timezone corrections for standard time at the moment in
	time calculated in step 7 is applied
9.	if the timezone has DST:
	+ if tm_isdst is positive, the time is adjusted by the offset
	+ if tm_isdst is negative, the result is either the same as
	  if it were 0 or the same as if it were 1; if the struct tm
	  specifies a gap or repeated segment, which of the two is
	  used is explicitly unspecified, i.e. the caller cannot rely
	  on the libc to guess his intent if he sets tm_isdst to -1.
10. (not numbered) for gaps or repeats, mktime uses either the value
	from before the gap/repeat or the one after, choice again
	unspecified

Tough luck there.

The wording in this part is interesting though:

| If tm_isdst is positive, mktime() shall further adjust the seconds
| since the Epoch by the DST offset.

But I guess that if you call with tm_isdst=1 and a broken-down time
that clearly corresponds to nōn-DST, the DST offset for it is just 0
and it’ll work out the obvious way.

bye,
//mirabilos
-- 
“It is inappropriate to require that a time represented as
 seconds since the Epoch precisely represent the number of
 seconds between the referenced time and the Epoch.”
	-- IEEE Std 1003.1b-1993 (POSIX) Section B.2.2.2

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.