[Bug 1954963] [NEW] tm_isdst=1 with mktime on 20.04 produces unexpected output

Daniel 1954963 at bugs.launchpad.net
Thu Dec 16 00:11:12 UTC 2021


Public bug reported:

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 bug opened
with Debian can be found here:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1001774

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 Ubuntu. 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();
}

** Affects: glibc (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1954963

Title:
  tm_isdst=1 with mktime on 20.04 produces unexpected output

Status in glibc package in Ubuntu:
  New

Bug description:
  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 bug
  opened with Debian can be found here:

  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1001774

  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 Ubuntu. 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();
  }

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1954963/+subscriptions




More information about the foundations-bugs mailing list