From: Jim Meyering Date: Fri, 29 Sep 2006 16:52:48 +0000 (+0000) Subject: * src/shuf.c (read_input): Fix an off-by-one error that X-Git-Tag: v6.3~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a38becce9752e67f71e79e8c230b327869802e70;p=thirdparty%2Fcoreutils.git * src/shuf.c (read_input): Fix an off-by-one error that would cause an infloop for piped input of 8KB or more. * NEWS: Mention the fix. * tests/misc/shuf: Test for the above fix. --- diff --git a/ChangeLog b/ChangeLog index d22566f667..ac1cb0ee7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2006-09-29 Jim Meyering + * src/shuf.c (read_input): Fix an off-by-one error that + would cause an infloop for piped input of 8KB or more. + * NEWS: Mention the fix. + * tests/misc/shuf: Test for the above fix. + Since any system may be affected by the Darwin readdir bug, perform the extra rewinddir unconditionally. The performance impact of rewinding a directory is negligible. diff --git a/NEWS b/NEWS index 7d2eb9f8f1..7a93f63133 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,9 @@ GNU coreutils NEWS -*- outline -*- "groups" now processes options like --help more compatibly. + shuf would infloop, given 8KB or more of piped input + + * Major changes in release 6.2 (2006-09-18) [stable candidate] ** Changes in behavior diff --git a/src/shuf.c b/src/shuf.c index 39cfdfffb8..68003c2593 100644 --- a/src/shuf.c +++ b/src/shuf.c @@ -178,7 +178,7 @@ read_input (FILE *in, char eolbyte, char ***pline) do { - if (alloc == used) + if (alloc <= used + 1) { if (alloc == SIZE_MAX) xalloc_die (); diff --git a/tests/misc/shuf b/tests/misc/shuf index 585df99017..17a74dd3fe 100755 --- a/tests/misc/shuf +++ b/tests/misc/shuf @@ -51,4 +51,8 @@ cmp in out > /dev/null && { fail=1; echo "not random?" 1>&2; } sort -n out > out1 cmp in out1 || { fail=1; echo "not a permutation" 1>&2; } +# Before coreutils-6.3, this would infloop. +# "seq 1860" produces 8193 bytes of output. +seq 1860 | shuf > /dev/null || fail=1 + (exit $fail); exit $fail