Skip to content

Commit

Permalink
tests: remove a non portable localtime test
Browse files Browse the repository at this point in the history
* tests/misc/date.pl: This test was dependent on perl
unconditionally calling the system localtime() as date(1) does.
However perl has its own configure checks in place to avoid buggy
localtime implementations.  Therefore comment out this test
as a FIXME for now.  This test was seen to fail on FreeBSD 10
where localtime() returns nonsense values instead of failing
for arguments >= 2^56.
  • Loading branch information
pixelb committed Jan 15, 2016
1 parent 7648870 commit 3aa84d0
Showing 1 changed file with 18 additions and 30 deletions.
48 changes: 18 additions & 30 deletions tests/misc/date.pl
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,6 @@

my $fmt = "'+%Y-%m-%d %T'";

# Determine a number of seconds that will provoke an invalid
# time diagnostic from date. If possible, use a number that
# is less than 2^64, yet so large that it would cause the resulting
# tm_year value to be too large for a 32-bit int. But some systems
# (Solaris 8) have a buggy localtime that mistakenly accepts such
# invalid times and give garbage in tm_year. Other systems might
# have an int type that is wider than 32. So if this localtime
# call succeeds, use 2^64 as the number of seconds.
my $n_seconds = 72057594037927935;
my @d = localtime ($n_seconds);
my $year = $d[5];
defined $year
and $n_seconds = '18446744073709551616';

my @Tests =
(
# test-name, [option, option, ...] {OUT=>"expected-output"}
Expand Down Expand Up @@ -255,22 +241,24 @@
['neg-secs', '-d @-22 +%05s', {OUT=>"-0022"}],
['neg-secs2', '-d @-22 +%_5s', {OUT=>" -22"}],

# Before today's fix, date would print uninitialized data
# to standard output for an out-of-range date:
# $ date -d @$(echo 2^56-1|bc) 2> /dev/null | od -a -N3
# 0000000 p 4 6
# 0000003
['uninit-64', "-d \@$n_seconds",
{OUT=>''},
# Use ERR_SUBST to get around fact that the diagnostic
# you get on a system with 32-bit time_t is not the same as
# the one you get for a system where it's 64 bits wide:
# - date: time 72057594037927935 is out of range
# + date: invalid date '@72057594037927935'
{ERR_SUBST => 's/.*//'},
{ERR => "\n"},
{EXIT => 1},
],
# FIXME: Ensure date doesn't print uninitialized data
# for an out-of-range date. This test is currently
# disabled as various systems have different limits
# for localtime(), and we can't use perl for example
# to determine those limits as it doesn't always call
# down to the system localtime() as it has configure
# time checks and settings itself for these limits.
#['uninit-64', "-d \@72057594037927935",
# {OUT=>''},
# # Use ERR_SUBST to get around fact that the diagnostic
# # you get on a system with 32-bit time_t is not the same as
# # the one you get for a system where it's 64 bits wide:
# # - date: time 72057594037927935 is out of range
# # + date: invalid date '@72057594037927935'
# {ERR_SUBST => 's/.*//'},
# {ERR => "\n"},
# {EXIT => 1},
#],

['fill-1', '-d 1999-12-08 +%_3d', {OUT=>' 8'}],
['fill-2', '-d 1999-12-08 +%03d', {OUT=>'008'}],
Expand Down

0 comments on commit 3aa84d0

Please sign in to comment.