Subject: Re: bug#47859: Additional seq outlandish example: seq 0 dangers

From: Erik Auerswald <[email-masked]>
Date: Sun, 18 Apr 2021 08:29:59 +0200

Hi,

On Sun, Apr 18, 2021 at 09:26:28AM +0800, 積丹尼 Dan Jacobson wrote:
> On (info "(coreutils) seq invocation") we read
>    Be careful when using ‘seq’ with outlandish values: otherwise you
>    may...
> 
> Here's another 'fun/sad/DDOS yourself' example you might add:
> 
> One day I wrote a Makefile,
> m:
> 	seq 0 9|sed s/$$/號.html/|xargs make
> but before using it, I though I'll just test with one item,
> m:
> 	seq 0  |sed s/$$/號.html/|xargs make
> well of course... as seq prints nothing here,
> this triggered a massive ever growing recursive loop...
> 
> Yes, all my fault for picking 0. I'll pick 1 next time.
> 
> P.S., perhaps document how to get seq to cough up just "0". One way I
> found was:
> $ seq 0 1 0
> 0

I would like to add more information to this bug report with the intent of
helping everybody involved now or in the future.

A slighly simpler method to make 'seq' print just '0' is:

    $ seq 0 0
    0

This is documented, but more generally, e.g., in 'seq --help':

    $ seq --help
    Usage: seq [OPTION]... LAST
      or:  seq [OPTION]... FIRST LAST
      or:  seq [OPTION]... FIRST INCREMENT LAST
    Print numbers from FIRST to LAST, in steps of INCREMENT.
    [...]
    If FIRST or INCREMENT is omitted, it defaults to 1.  [...]
    [...]

Thus, 'seq 0' is the same as 'seq 1 1 0' and 'seq 0 0' is the same as
'seq 0 1 0'.

The default value of '1' for omitted parameters affects other values, too,
not just '0':

    $ seq -1
    $ seq -1 -1
    -1
    $ seq -100000
    $ seq -100000 -100000
    -100000

When "FIRST" and "LAST" are the same, any valid "INCREMENT" value results
in 'seq' printing just one value, not just the default of '1':

    $ seq 0 200 0
    0
    $ seq 0 -200 0
    0
    $ seq 0 0 0
    seq: invalid Zero increment value: ‘0’
    Try 'seq --help' for more information.

Thus IMHO a possible addition to the documentation should probably not
just single out 'seq 0', but mention any number smaller than the default
value for "FIRST" of '1'.

HTH, HAND
Erik
-- 
Inside every large problem is a small problem struggling to get out.
                        -- Hoare's Law of Large Problems