[Bug 8951] New: touch -t 197001010000 will use seconds from localtime instead of 0

bugzilla at busybox.net bugzilla at busybox.net
Thu May 19 13:10:37 UTC 2016


https://bugs.busybox.net/show_bug.cgi?id=8951

            Bug ID: 8951
           Summary: touch -t 197001010000 will use seconds from localtime
                    instead of 0
           Product: Busybox
           Version: 1.24.x
          Hardware: All
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P5
         Component: Standard Compliance
          Assignee: unassigned at busybox.net
          Reporter: ncopa at alpinelinux.org
                CC: busybox-cvs at busybox.net
  Target Milestone: ---

POSIX says about `touch -t [[CC]YY]MMDDhhmm[.SS]`:

> If SS is not given a value, it is assumed to be zero.

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html

Busybox touch does not set it to zero, instead it uses the localtime's seconds.

To reproduce: 

  TZ=UTC strace busybox touch -t 197001010000 /tmp/foo

  ...
  utimensat(AT_FDCWD, "/tmp/foo", [{23, 0}, {23, 0}], 0) = 0
  ...


note that utimesat(2) is called with the seconds part to 23.

Doing the same with the .ss specified will correctly set the seconds part to 0:

  TZ=UTC strace busybox touch -t 197001010000.00 /tmp/foo

  ...
  utimensat(AT_FDCWD, "/tmp/foo", [{0, 0}, {0, 0}], 0) = 0
  ...


The reason is that the time_t struct is initialized with localtime instead of
zero:
https://git.busybox.net/busybox/tree/coreutils/touch.c#n155

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the busybox-cvs mailing list