summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Voelker <mail@bernhard-voelker.de>2016-04-14 12:38:09 +0200
committerBernhard Voelker <mail@bernhard-voelker.de>2016-04-14 12:38:09 +0200
commit81e589021d9c47e4fbc4284e82881a9703246476 (patch)
tree2258556550b9c8155e54cfcf3e50bc2745a52574
parent8faf269250e8eff5f5dd164dfa1d661c34f52ade (diff)
downloadcoreutils-81e589021d9c47e4fbc4284e82881a9703246476.tar.xz
seq: do not allow 0 as increment value
* src/seq.c (main): Exit with an error diagnostic when the given step value is Zero. (usage): Document it. * doc/coreutils.texi (seq invocation): Likewise. * tests/misc/seq.pl: Add tests. * NEWS (Changes in behavior): Mention the change. Reported by Маренков Евгений in: http://bugs.gnu.org/23110
-rw-r--r--NEWS2
-rw-r--r--doc/coreutils.texi2
-rw-r--r--src/seq.c8
-rwxr-xr-xtests/misc/seq.pl10
4 files changed, 22 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 9445977ad..13af70242 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,8 @@ GNU coreutils NEWS -*- outline -*-
** Changes in behavior
+ seq no longer accepts 0 value as increment argument.
+
stat now outputs nanosecond information for time stamps even if
they are out of localtime range.
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index 45706bdbf..6b706359e 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -17422,6 +17422,8 @@ even when @var{first} is larger than @var{last}.
The sequence of numbers ends when the sum of the current number and
@var{increment} would become greater than @var{last},
so @code{seq 1 10 10} only produces @samp{1}.
+@var{increment} must not be @samp{0}; use @command{yes} to get
+repeated output of a constant number.
Floating-point numbers may be specified. @xref{Floating point}.
The program accepts the following options. Also see @ref{Common options}.
diff --git a/src/seq.c b/src/seq.c
index fbb94a0c0..91cf625e9 100644
--- a/src/seq.c
+++ b/src/seq.c
@@ -92,6 +92,7 @@ INCREMENT would become greater than LAST.\n\
FIRST, INCREMENT, and LAST are interpreted as floating point values.\n\
INCREMENT is usually positive if FIRST is smaller than LAST, and\n\
INCREMENT is usually negative if FIRST is greater than LAST.\n\
+INCREMENT must not be 0.\n\
"), stdout);
fputs (_("\
FORMAT must be suitable for printing one argument of type 'double';\n\
@@ -635,6 +636,13 @@ main (int argc, char **argv)
if (optind < argc)
{
step = last;
+ if (step.value == 0)
+ {
+ error (0, 0, _("invalid Zero increment value: %s"),
+ quote (argv[optind-1]));
+ usage (EXIT_FAILURE);
+ }
+
last = scan_arg (argv[optind++]);
}
}
diff --git a/tests/misc/seq.pl b/tests/misc/seq.pl
index 6564415d4..ac0664fc6 100755
--- a/tests/misc/seq.pl
+++ b/tests/misc/seq.pl
@@ -25,6 +25,7 @@ use strict;
my $prog = 'seq';
my $try_help = "Try '$prog --help' for more information.\n";
+my $err_inc_zero = "seq: invalid Zero increment value: '0'\n".$try_help;
my $locale = $ENV{LOCALE_FR_UTF8};
! defined $locale || $locale eq 'none'
@@ -151,6 +152,15 @@ my @Tests =
['fast-1', qw(4), {OUT => [qw(1 2 3 4)]}],
['fast-2', qw(1 4), {OUT => [qw(1 2 3 4)]}],
['fast-3', qw(1 1 4), {OUT => [qw(1 2 3 4)]}],
+
+ # Ensure an INCREMENT of Zero is rejected.
+ ['inc-zero-1', qw(1 0 10), {EXIT => 1}, {ERR => $err_inc_zero}],
+ ['inc-zero-2', qw(0 -0 0), {EXIT => 1}, {ERR => $err_inc_zero},
+ {ERR_SUBST => 's/-0/0/'}],
+ ['inc-zero-3', qw(1 0.0 10), {EXIT => 1},{ERR => $err_inc_zero},
+ {ERR_SUBST => 's/0.0/0/'}],
+ ['inc-zero-4', qw(1 -0.0e-10 10), {EXIT => 1},{ERR => $err_inc_zero},
+ {ERR_SUBST => 's/-0\.0e-10/0/'}],
);
# Append a newline to each entry in the OUT array.