On 2025-09-23 16:46, Paul Eggert wrote:
FreeBSD gmtime and localtime return pointers to malloc'ed storage that
might be freed before their callers use the pointers, leading to
undefined behavior. (This cannot happen on platforms that conform to ISO
C and POSIX.) If a change is proposed to ISO C and POSIX, this issue
should be mentioned and taken into account in the wording.
Oh, sorry, I was too rash on this, as the latest ISO C standard (C23)
has wording that allows the FreeBSD behavior. So C23 allows the results
of my stress test even though POSIX.1-2024 prohibits it. The next
version of POSIX will surely follow C23 so FreeBSD will be off the hook
then.
Here's a quote from C23 §7.29.3 ¶2 that makes this clear:
Accessing the returned pointer after the thread that called the function
that returned it has exited results in undefined behavior.
You can get a copy of C23 (well, not the official C23 but close enough)
here:
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf
Anyway, this means my objection to this behavior is based only on
conformance to POSIX.1-2024 and earlier, or on ISO C17 and earlier, not
on ISO C23. Which means it'd be more reasonable to have a compile-time
flag in tzcode to select FreeBSD-like behavior.