Skip to content

year 2038 bug in POSIX::mktime #21551

Closed
@kernigh

Description

@kernigh

Module: POSIX


Description

On my old 32-bit powerpc, POSIX::mktime overflows from January 2038
to December 1901. I guess it's because ivsize=4.
Time::Local::timelocal_posix doesn't have this bug.

Steps to Reproduce

use POSIX 'mktime';
for (17 .. 21) {
  $_ = mktime(0, 0, 0, $_, 0, 2038 - 1900);
  printf "%s => %s\n", $_, scalar(localtime $_);
}

Expected behavior

This script should show the days 17 to 21 in January 2038, but I see
wrong days in 1901:

2147317200 => Sun Jan 17 00:00:00 2038
2147403600 => Mon Jan 18 00:00:00 2038
-2147477296 => Fri Dec 13 17:31:44 1901
-2147390896 => Sat Dec 14 17:31:44 1901
-2147304496 => Sun Dec 15 17:31:44 1901

Flags

  • category=library
  • severity=low
  • module=POSIX

Perl configuration

Site configuration information for perl 5.38.0:

Configured by kernigh at Wed Jul 26 13:15:53 EDT 2023.

Summary of my perl5 (revision 5 version 38 subversion 0) configuration:
  Commit id: 76298ae68aa7796f0ffc05095b127d23f4b2de8f
  Platform:
    osname=openbsd
    osvers=7.3
    archname=OpenBSD.powerpc-openbsd
    uname='openbsd wisconsin.my.domain 7.3 generic#144 macppc '
    config_args='-des -Dprefix=/home/kernigh/prefix/lop'
    hint=recommended
    useposix=true
    d_sigaction=define
    useithreads=undef
    usemultiplicity=undef
    use64bitint=undef
    use64bitall=undef
    uselongdouble=undef
    usemymalloc=n
    default_inc_excludes_dot=define
  Compiler:
    cc='cc'
    ccflags ='-fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    optimize='-O2'
    cppflags='-fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion=''
    gccversion='OpenBSD Clang 13.0.0'
    gccosandvers=''
    intsize=4
    longsize=4
    ptrsize=4
    doublesize=8
    byteorder=4321
    doublekind=4
    d_longlong=define
    longlongsize=8
    d_longdbl=define
    longdblsize=8
    longdblkind=0
    ivtype='long'
    ivsize=4
    nvtype='double'
    nvsize=8
    Off_t='off_t'
    lseeksize=8
    alignbytes=8
    prototype=define
  Linker and Libraries:
    ld='cc'
    ldflags ='-Wl,-E  -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/lib/clang/13.0.0/lib /usr/lib /usr/local/lib
    libs=-lpthread -lm -lutil -lc
    perllibs=-lpthread -lm -lutil -lc
    libc=/usr/lib/libc.so.97.0
    so=so
    useshrplib=false
    libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs
    dlext=so
    d_dlsymun=undef
    ccdlflags=' '
    cccdlflags='-DPIC -fPIC '
    lddlflags='-shared -fPIC  -L/usr/local/lib -fstack-protector-strong'


---
@INC for perl 5.38.0:
    /home/kernigh/prefix/lop/lib/perl5/site_perl/5.38.0/OpenBSD.powerpc-openbsd
    /home/kernigh/prefix/lop/lib/perl5/site_perl/5.38.0
    /home/kernigh/prefix/lop/lib/perl5/5.38.0/OpenBSD.powerpc-openbsd
    /home/kernigh/prefix/lop/lib/perl5/5.38.0

---
Environment for perl 5.38.0:
    HOME=/home/kernigh
    LANG (unset)
    LANGUAGE (unset)
    LC_CTYPE=en_US.UTF-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/kernigh/prefix/lop/bin:/home/kernigh/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/games:/home/kernigh/.local/share/gem/ruby/3.1/bin
    PERL_BADLANG (unset)
    SHELL=/bin/ksh

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions