Bug#1001774: tm_isdst=1 with mktime produces unexpected output
Package: glibc
Version: 2.31
Use of mktime with tm_isdst=1 results in -1 indicating an error. This appears unexpected, and cannot be replicated on OS X 11.6.1, Centos 7.9, Fedora 35, Alpine or RHEL 8. The issue was first observed on Github Actions ubuntu-latest (20.04).
This issue was originally opened on the CPython bug tracker. They advised opening a bug report with both Ubuntu and Debian. The original report with CPython can be found here:
https://bugs.python.org/issue44413
An example C program follows at the end of the bug report, and can be compiled with “gcc bug.c -o bug”.
An example of execution of the bug, and failure, within a glibc 2.31 environment can be found here:
https://github.com/wasade/cpython/runs/4541212472?check_suite_focus=true#step:17:57
Thank you for your time. Please let me know if additional information would be helpful. This is my first bug report to Debian. Though I reviewed the guidance docs, I apologize in advance if I overlooked something.
-Daniel
#include <time.h>
#include <stdio.h>
void do_test() {
struct tm tm_works = { .tm_year=117,
.tm_mon=4,
.tm_mday=26,
.tm_hour=15,
.tm_min=30,
.tm_sec=16,
.tm_wday=4,
.tm_yday=145,
.tm_isdst=-1 };
struct tm tm_fails = { .tm_year=117,
.tm_mon=4,
.tm_mday=26,
.tm_hour=15,
.tm_min=30,
.tm_sec=16,
.tm_wday=4,
.tm_yday=145,
.tm_isdst=1 };
time_t works = mktime(&tm_works);
time_t fails = mktime(&tm_fails);
if(works == -1) {
printf("Unexpected failure\n");
} else {
if(works == fails) {
printf("Test passed\n");
} else {
printf("Test failed: works=%d; fails=%d\n", (int)works, (int)fails);
}
}
}
int main(int argc, char **argv) {
do_test();
}
Reply to: