GNU bug report logs - #16855
report a bug about shuf

Previous Next

Package: coreutils;

Reported by: valiant xiao <s2exqx <at> gmail.com>

Date: Sun, 23 Feb 2014 18:59:03 UTC

Severity: normal

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Pádraig Brady <P <at> draigBrady.com>
To: 16855 <at> debbugs.gnu.org, eggert <at> cs.ucla.edu, s2exqx <at> gmail.com
Subject: bug#16855: report a bug about shuf
Date: Mon, 24 Feb 2014 01:03:55 +0000
On 02/23/2014 11:37 PM, Paul Eggert wrote:
> Thanks for the bug report.  I've committed the attached patch.
> 
> shuf.diff
> 
> 
> From 24eb395471176e24762b08bfcef7562911537504 Mon Sep 17 00:00:00 2001
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Sun, 23 Feb 2014 15:34:48 -0800
> Subject: [PATCH] shuf: with -r, don't dump core if the input is empty
> 
> Problem reported by valiant xiao in <http://bugs.gnu.org/16855>.
> * NEWS: Document this.
> * src/shuf.c (main): With -r, report an error if the input is empty.
> * tests/misc/shuf.sh: Test for the bug.
> ---
>  NEWS               |  3 +++
>  src/shuf.c         | 15 +++++++++++----
>  tests/misc/shuf.sh |  4 ++++
>  3 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/NEWS b/NEWS
> index e72942b..2df246d 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -22,6 +22,9 @@ GNU coreutils NEWS                                    -*- outline -*-
>    it would display an error, requiring --no-dereference to avoid the issue.
>    [bug introduced in coreutils-5.3.0]
>  
> +  shuf -r no longer dumps core if the input is empty.
> +  [bug introduced in coreutils-8.22]
> +
>  ** New features
>  
>    od accepts a new option: --endian=TYPE to handle inputs with different byte
> diff --git a/src/shuf.c b/src/shuf.c
> index d4641fe..2a91072 100644
> --- a/src/shuf.c
> +++ b/src/shuf.c
> @@ -576,11 +576,18 @@ main (int argc, char **argv)
>    /* Generate output according to requested method */
>    if (repeat)
>      {
> -      if (input_range)
> -        i = write_random_numbers (randint_source, head_lines,
> -                                  lo_input, hi_input, eolbyte);
> +      if (head_lines == 0)
> +        i = 0;
>        else
> -        i = write_random_lines (randint_source, head_lines, line, n_lines);
> +        {
> +          if (n_lines == 0)
> +            error (EXIT_FAILURE, 0, _("No lines to repeat"));

Thanks for the quick fix.

I was wondering if we do want to error if there is no input,
rather than silently exit(0)?

  $ shuf -r -n1 /dev/null
  shuf: No lines to repeat

I guess that makes sense since we can't fulfil the request
to repeat forever, or with -n; at least up to n.
I.E. rather than this being a transformation of the input,
the input in insufficient to generate the requested output.

thanks,
Pádraig.




This bug report was last modified 11 years and 87 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.