From 12284825dcc5d9485ebaa78aedd93f450bad7b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Fri, 20 Jan 2017 12:40:35 +0000 Subject: [PATCH 1/2] date: fix TZ= regression On 17/03/16 17:38, Paul Eggert wrote: > On 03/16/2016 08:51 PM, Assaf Gordon wrote: >> I suspect it has something to do with this commit: >> commit 037e3b9847feb46cf6b58d99ce960d3987faaf52 > > You're right, and thanks for that detailed bug report. I installed the > attached patch, which fixed the bug for me. This introduced a bug unfortunately due to the side effects of parse_datetime(). parse_datetime resets the TZ env variable but doesn't call tzset(). Hence using the wrong timezone for output. Previously localtime() called tzset() implicitly. Perhaps we should call tzset() in parse_datetime() if needed? I'm not sure as to whether this undoes the fix for bug 23035? Anyway this avoids the issue on GNU/Linux. Signed-off-by: Kamil Dudka --- src/date.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/date.c b/src/date.c index 619a72b..2b3d890 100644 --- a/src/date.c +++ b/src/date.c @@ -571,6 +571,8 @@ show_date (const char *format, struct timespec when, timezone_t tz) { struct tm tm; + tzset (); + if (localtime_rz (tz, &when.tv_sec, &tm)) { if (format == rfc_2822_format) -- 2.7.4 From 3c082157634bd4fbc79c26e9c56abb4da79e9a2d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Jan 2017 18:24:02 -0800 Subject: [PATCH 2/2] date: test for TZ= regression Problem reported by Paul Wise for Debian, in: https://bugs.debian.org/851934 This is fallout from the fix for GNU Bug#23035. * tests/misc/date.pl: Test the fix. Upstream-commit: b14be5085cd1aefd473a000456b21270e6070711 Signed-off-by: Kamil Dudka --- tests/misc/date-debug.sh | 4 ++-- tests/misc/date.pl | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/misc/date.pl b/tests/misc/date.pl index 7e45e98..be8b39e 100755 --- a/tests/misc/date.pl +++ b/tests/misc/date.pl @@ -291,6 +291,12 @@ my @Tests = {ERR => "date: invalid date 'TZ=\"\"\"'\n"}, {EXIT => 1}, ], + + # https://bugs.debian.org/851934#10 + ['cross-TZ-mishandled', "-d 'TZ=\"EST5\" 1970-01-01 00:00'", + {ENV => 'TZ=PST8'}, + {OUT => 'Wed Dec 31 21:00:00 PST 1969'}, + ], ); # Repeat the cross-dst test, using Jan 1, 2005 and every interval from 1..364. -- 2.7.4