Port upstream fix for shuf, to be removed with v8.23: shuf --repeat no longer dumps core if the input is empty. [bug introduced with the --repeat feature in coreutils-8.22] This patch squashes these 2 upstream commits: http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=9f60f37a28 http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=5475e6083f While the former implements the actual fix for the problem, the latter only changes the new error diagnostic. The change in the NEWS entry in the latter patch is not visible in the following patch because that hunk is omitted; however, that corrected NEWS entry is above. ----------------------------------------------- commit 9f60f37a28c37acb66aa38003ccaa07f13abbd9d Author: Paul Eggert Date: Sun Feb 23 15:34:48 2014 -0800 shuf: with -r, don't dump core if the input is empty Problem reported by valiant xiao in . * src/shuf.c (main): With -r, report an error if the input is empty. * tests/misc/shuf.sh: Test for the bug. ----------------------------------------------- commit 5475e6083f46a2f9f7ccf4173f391bf518421523 Author: Bernhard Voelker Date: Wed Feb 26 08:36:50 2014 +0100 shuf: convert error diagnostic to lowercase * src/shuf.c (main): s/No/no/, introduced by commit v8.22-25-g9f60f37. Prompted by the syntax-check rule sc_error_message_uppercase --- src/shuf.c | 15 +++++++++++---- tests/misc/shuf.sh | 4 ++++ 2 files changed, 15 insertions(+), 4 deletions(-) Index: src/shuf.c =================================================================== --- src/shuf.c.orig +++ 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")); + if (input_range) + i = write_random_numbers (randint_source, head_lines, + lo_input, hi_input, eolbyte); + else + i = write_random_lines (randint_source, head_lines, line, n_lines); + } } else { Index: tests/misc/shuf.sh =================================================================== --- tests/misc/shuf.sh.orig +++ tests/misc/shuf.sh @@ -43,6 +43,10 @@ compare in out1 || { fail=1; echo "not a t=$(shuf -e a b c d e | sort | fmt) test "$t" = 'a b c d e' || { fail=1; echo "not a permutation" 1>&2; } +# coreutils-8.22 dumps core. +shuf -er +test $? -eq 1 || fail=1 + # Before coreutils-6.3, this would infloop. # "seq 1860" produces 8193 (8K + 1) bytes of output. seq 1860 | shuf > /dev/null || fail=1