Bug 241978 - tzname not always set right
Summary: tzname not always set right
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: standards (show other bugs)
Version: 12.1-RELEASE
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-standards mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-11-15 06:19 UTC by Andras Farkas
Modified: 2019-11-21 07:28 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andras Farkas 2019-11-15 06:19:39 UTC
tzname doesn't always get set.  Assuming it's meant to be POSIX-compliant (not necessarily XSI/SUS here, but POSIX) then the following behavior is buggy:
Doing the following:

export TZ=CAT0
cat > daytime.c <<EOF
#include <stdio.h>
#include <time.h>

int main(void)
{
        tzset();
        printf("tzname[0]: %s\n", tzname[0]);
        printf("tzname[1]: %s\n", tzname[1]);
        /*
        printf("daylight: %d\n", daylight);
        printf("timezone: %ld\n", timezone);
        */
}
EOF
cc daytime.c
./a.out

The following is the output on my system:

tzname[0]: EST
tzname[1]:    

nota bene: the second one isn't null/blank/empty, it's three spaces.
This is incorrect, as CAT0 is a valid value of TZ.  If we set it to CAT0DOG0 instead, the output changes dramatically:

tzname[0]: CAT
tzname[1]: DOG

This is the expected output for when TZ is CAT0DOG0.
Back to TZ just being CAT0, a friend using GNU/Linux was able to show me the output there:

tzname[0]: CAT
tzname[1]: CAT

If I read POSIX correctly, GNU's implementation and output are correct here.  This is the output I expect.

I found OpenBSD's output was also buggy, in a different way:

tzname[0]:    
tzname[1]:    

(similar note: neither of those are null/empty, they're three spaces)

I already sent OpenBSD a bug report.

References:
https://www.freebsd.org/cgi/man.cgi?query=ctime&apropos=0&sektion=0&manpath=FreeBSD+12.1-RELEASE+and+Ports&arch=default&format=html
https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html
Comment 1 Andras Farkas 2019-11-21 07:28:29 UTC
I've confirmed that this bug isn't present in upstream tzcode, at least not in release 2019c
With upstream tzcode on FreeBSD, the results are:
tzname[0]: CAT
tzname[1]:    
(three spaces for the latter value)

Discussion had there:
http://mm.icann.org/pipermail/tz/2019-November/028596.html
http://mm.icann.org/pipermail/tz/2019-November/thread.html

The OpenBSD bug report I also made before sending the FreeBSD bug report:
https://marc.info/?l=openbsd-bugs&m=157379849727998&w=2