Further exchange on https://debbugs.gnu.org/35289 suggests this is a
libc6 problem, not a coreutils/date one.

Assaf Gordon (upstream) provided a test that can be run (attached here
are inv-year.c). If it fails on the mktime() call, then it is not
'date', but libc6.

I also found that setting TZ=UTC seems to bypass the problem; in my
primary test machine, TZ was unset (but I was still getting a failure).
Setting TZ to UTC, or an invalid value, works. Setting
TZ=America/Chicago fails (perhaps related to DST?):

cerdea@piatam:~/Downloads$ env TZ=UTC date --debug +%-Y -d '- 2010 years'
date: parsed relative part: -2010 year(s)
date: input timezone: TZ="UTC" environment value
date: using current time as starting value: '17:28:13'
date: using current date as starting value: '(Y-M-D) 2019-04-16'
date: starting date/time: '(Y-M-D) 2019-04-16 17:28:13'
date: warning: when adding relative months/years, it is recommended to specify 
the 15th of the months
date: after date adjustment (-2010 years, +0 months, +0 days),
date:     new date/time = '(Y-M-D) 0009-04-16 17:28:13'
date: '(Y-M-D) 0009-04-16 17:28:13' = -61874001107 epoch-seconds
date: timezone: TZ="UTC" environment value
date: final: -61874001107.571934909 (epoch-seconds)
date: final: (Y-M-D) 0009-04-16 17:28:13 (UTC)
date: final: (Y-M-D) 0009-04-16 17:28:13 (UTC+00)
9
cerdea@piatam:~/Downloads$ env TZ=blah/blah date --debug +%-Y -d '- 2010 years'
date: parsed relative part: -2010 year(s)
date: input timezone: TZ="blah/blah" environment value
date: using current time as starting value: '17:28:26'
date: using current date as starting value: '(Y-M-D) 2019-04-16'
date: starting date/time: '(Y-M-D) 2019-04-16 17:28:26'
date: warning: when adding relative months/years, it is recommended to specify 
the 15th of the months
date: after date adjustment (-2010 years, +0 months, +0 days),
date:     new date/time = '(Y-M-D) 0009-04-16 17:28:26'
date: '(Y-M-D) 0009-04-16 17:28:26' = -61874001094 epoch-seconds
date: timezone: TZ="blah/blah" environment value
date: final: -61874001094.525620784 (epoch-seconds)
date: final: (Y-M-D) 0009-04-16 17:28:26 (UTC)
date: final: (Y-M-D) 0009-04-16 17:28:26 (UTC+00)
9
cerdea@piatam:~/Downloads$ env TZ=America/Chicago date --debug +%-Y -d '- 2010 
years'
date: parsed relative part: -2010 year(s)
date: input timezone: TZ="America/Chicago" environment value
date: using current time as starting value: '12:28:37'
date: using current date as starting value: '(Y-M-D) 2019-04-16'
date: starting date/time: '(Y-M-D) 2019-04-16 12:28:37'
date: warning: when adding relative months/years, it is recommended to specify 
the 15th of the months
date: error: adding relative date resulted in an invalid date: '(Y-M-D) 
0009-04-16 12:28:37'
date: invalid date ‘- 2010 years’
1 cerdea@piatam:~/Downloads$ 

and, with Assaf's test:

cerdea@piatam:~/Downloads$ env TZ=UTC ./inv-year
time() = 1555435812
localtime() = 2019-04-16 17:30:12
              (mday=16 wday=2, isdst=0)
struct tm (after adjustment) = 0009-04-16 17:30:12
                               (mday=16 wday=2, isdst=0)
mktime() after date adjustment = -61874000988
cerdea@piatam:~/Downloads$ env TZ=blahblah ./inv-year
time() = 1555435821
localtime() = 2019-04-16 17:30:21
              (mday=16 wday=2, isdst=0)
struct tm (after adjustment) = 0009-04-16 17:30:21
                               (mday=16 wday=2, isdst=0)
mktime() after date adjustment = -61874000979
cerdea@piatam:~/Downloads$ env TZ=America/Chicago ./inv-year
time() = 1555435831
localtime() = 2019-04-16 12:30:31
              (mday=16 wday=2, isdst=1)
struct tm (after adjustment) = 0009-04-16 12:30:31
                               (mday=16 wday=2, isdst=1)
inv-year: mktime() failed: Value too large for defined data type

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to coreutils in Ubuntu.
https://bugs.launchpad.net/bugs/1824688

Title:
  date+%-Y -d "- N years" errors when N > 111

Status in coreutils package in Ubuntu:
  Confirmed

Bug description:
  I have been using 'date +%-Y -d "- 2010 years" in a script for years
  but today after using the script after upgrading to disco it has
  failed.

  After some experimentation it succeeds with upto 111 years but fails
  from 112 onwards.

  Error given is:

  'date: invalid date '- 112 years'.

  ProblemType: Bug
  DistroRelease: Ubuntu 19.04
  Package: coreutils 8.30-1ubuntu1
  ProcVersionSignature: Ubuntu 5.0.0-11.12-generic 5.0.6
  Uname: Linux 5.0.0-11-generic x86_64
  ApportVersion: 2.20.10-0ubuntu27
  Architecture: amd64
  Date: Sun Apr 14 10:59:36 2019
  InstallationDate: Installed on 2017-10-08 (553 days ago)
  InstallationMedia: Ubuntu 16.04.2 LTS "Xenial Xerus" - Release amd64 
(20170215.2)
  SourcePackage: coreutils
  UpgradeStatus: Upgraded to disco on 2019-04-13 (1 days ago)

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

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to