diff options
author | Jim Meyering <meyering@redhat.com> | 2011-02-07 08:29:33 +0100 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2011-02-07 09:25:51 +0100 |
commit | 2e636af1ef3f6a5ef872bdd2297dd25198c69395 (patch) | |
tree | 11170c0518c022cbb831d5e9f5a775e38397b4a8 | |
parent | 9f618068755b51d19b22c52bc4a2f8084946948e (diff) | |
download | coreutils-2e636af1ef3f6a5ef872bdd2297dd25198c69395.tar.xz |
cut: don't segfault for large unbounded range
* src/cut.c (set_fields): When computing the maximum range endpoint,
take into consideration the start of any unbounded range, like "999-".
* NEWS (Bug fixes): Mention it.
* tests/misc/cut (big-unbounded-b,c,f): Add tests.
Reported by Paul Marinescu in http://debbugs.gnu.org/7993
The bug was introduced on 2004-12-04 via commit 7380cf79.
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | src/cut.c | 2 | ||||
-rwxr-xr-x | tests/misc/cut | 4 |
3 files changed, 12 insertions, 0 deletions
@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*- * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + + cut could segfault when invoked with a user-specified output + delimiter and an unbounded range like "-f1234567890-". + [bug introduced in coreutils-5.3.0] + * Noteworthy changes in release 8.10 (2011-02-04) [stable] @@ -496,6 +496,8 @@ set_fields (const char *fieldstr) if (rp[i].hi > max_range_endpoint) max_range_endpoint = rp[i].hi; } + if (max_range_endpoint < eol_range_start) + max_range_endpoint = eol_range_start; /* Allocate an array large enough so that it may be indexed by the field numbers corresponding to all finite ranges diff --git a/tests/misc/cut b/tests/misc/cut index 435399463..c905ba9a3 100755 --- a/tests/misc/cut +++ b/tests/misc/cut @@ -150,6 +150,10 @@ my @Tests = {ERR=>$no_endpoint}], ['inval5', '-f', '1-,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}], ['inval6', '-f', '-1,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}], + # This would evoke a segfault from 5.3.0..6.10 + ['big-unbounded-b', '--output-d=:', '-b1234567890-', {IN=>''}, {OUT=>''}], + ['big-unbounded-c', '--output-d=:', '-c1234567890-', {IN=>''}, {OUT=>''}], + ['big-unbounded-f', '--output-d=:', '-f1234567890-', {IN=>''}, {OUT=>''}], ); @Tests = triple_test \@Tests; |