SHA256
1
0
forked from pool/coreutils
coreutils/coreutils-shuf-repeat-avoid-crash-when-input-empty.patch

86 lines
3.0 KiB
Diff
Raw Normal View History

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 <eggert@cs.ucla.edu>
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 <http://bugs.gnu.org/16855>.
* 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 <mail@bernhard-voelker.de>
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