bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#9614: date ignoring wrong TZ values


From: Assaf Gordon
Subject: bug#9614: date ignoring wrong TZ values
Date: Mon, 31 Dec 2018 10:03:58 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0

Hello,

On 2018-10-15 8:11 a.m., Assaf Gordon wrote:
tags 9614 wontfix
severity 9614 wishlist

Changed my mind (and noticed that Paul removed the "wontfix" tag),
so here goes...


On 27/09/11 11:48 PM, Paul Eggert wrote:
On 09/27/11 22:44, Sandro Santilli wrote:
A warning/error message with hint on how to correctly form
the string would be very friendly for users

Unfortunately, there's no portable way to determine
which TZ values are supported on the current platform.
One cannot even reliably determine whether the current TZ
value is supported.  So it's not clear how that warning
would be generated.


Attached is a crude attempt at detecting and warning about invalid
timezone strings.

First and foremost,
the code only runs when the user specify "--debug", so hopefully it
won't have any ill effects.

Second,
the goal is to detect the most common usage errors (e.g.
"America/NewYorx" or "Jamaika"), not to re-implement a fool-proof parser
for timezones.

Third,
The code runs "mostly well" on "most common" operating systems.
There sure to be cases where it doesn't work (but the "doesn't work"
part simply means that with "--debug" it might warn about invalid
timezone when it is a valid timezone that resolves to GMT).
OpenBSD is such a case.

---

With this patch, "date --debug" is able to warn about:

   TZ=America/NewYorx date --debug
   TZ=Europe/Lomdom date --debug
   TZ=FOOBAR date --debug
   date --debug -d 'TZ="Asia/Japan" 2019-01-01'

while it knows not to warn about:

   TZ=Africa/Dakar date --debug   # Valid GMT timezone
   TZ=GB date --debug             # Valid GMT timezone on most systems
   TZ=FOO+0 date --debug          # Valid UTC+0 timezone

The warning looks like so:

   $ TZ=America/Kalgary ./src/date --debug
   date: possibly invalid timezone in TZ envvar:
   date:    ‘America/Kalgary’
   date: timezone UTC0 will be used.
   Mon Dec 31 16:41:08 America 2018

The detection works well on Debian 9, Centos 7,
FreeBSD 11, NetBSD 7.1, AIX 7.2 .

OpenBSD is an example of where it doesn't work - there's no way
to differentiate between an invalid timezone and a valid GMT timezone.
But on such system, the code self-diagnoses this issue and prints
additional warnings:

  $ TZ=Africa/Dakar ./src/date --debug
  date: possibly invalid timezone in TZ envvar:
  date:    'Africa/Dakar'
  date: timezone UTC0 will be used.
  date: this system has limited capabilities in detecting
  date: invalid timezones. It is possible this is a valid timezone
  date: in the GMT zone.
  Mon Dec 31 16:43:35 GMT 2018

---

This patch includes a unit-test, but because the names of available
timezones vary so much between systems, it doesn't pass everywhere.
It is therefore marked as "very expensive".

To run it, use:

    make check SUBDIRS=. TESTS=tests/misc/date-debug-TZ.pl \
               RUN_VERY_EXPENSIVE_TESTS=yes

---

The heuristic code to determine if a timezone is valid or not is quite
hairy. There's likely room for improvements.


Comments and feedback and improvement suggestions are welcomed,
 - assaf














Attachment: 0001-date-detect-and-warn-about-invalid-TZ-values-with-de.patch.gz
Description: application/gzip


reply via email to

[Prev in Thread] Current Thread [Next in Thread]