[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openbsd-bugs
Subject:    tzname sometimes doesn't get set right
From:       Andras Farkas <deepbluemistake () gmail ! com>
Date:       2019-11-15 6:12:02
Message-ID: CAA0nTRuHdwrN-DfV6kjDJFNitDJjj-ckbL=WuFB-HmxRb2G3hQ () mail ! gmail ! com
[Download RAW message or body]

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:

tzname[0]:
tzname[1]:

nota bene: both of those aren't null/empty, they're 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 FreeBSD's output was also buggy, in a different way:

tzname[0]: EST
tzname[1]:

I'll be sending them a bug report too.

References:
https://man.openbsd.org/ctime.3
https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic