cut: fix a segfault with disjoint open ended ranges
authorPádraig Brady <P@draigBrady.com>
Mon, 4 Feb 2013 11:39:20 +0000 (11:39 +0000)
committerPádraig Brady <P@draigBrady.com>
Mon, 4 Feb 2013 13:55:01 +0000 (13:55 +0000)
Fixes the issue introduced in unreleased commit v8.20-60-gec48bea.

* src/cut.c (set_fields): Don't access the bit array if
we've an open ended range that's outside any finite range.
* tests/misc/cut.pl: Add tests for this case.
Reported by Marcel Böhme in http://bugs.gnu.org/13627

src/cut.c
tests/misc/cut.pl

index 36172c0..494aad7 100644 (file)
--- a/src/cut.c
+++ b/src/cut.c
@@ -530,7 +530,9 @@ set_fields (const char *fieldstr)
   if (output_delimiter_specified
       && !complement
       && eol_range_start
-      && max_range_endpoint && !is_printable_field (eol_range_start))
+      && max_range_endpoint
+      && (max_range_endpoint < eol_range_start
+          || !is_printable_field (eol_range_start)))
     mark_range_start (eol_range_start);
 
   free (rp);
index 874c169..41e9e20 100755 (executable)
@@ -193,6 +193,9 @@ my @Tests =
   ['inval6', '-f', '-1,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
   # This would evoke a segfault from 5.3.0..8.10
   ['big-unbounded-b', '--output-d=:', '-b1234567890-', {IN=>''}, {OUT=>''}],
+  ['big-unbounded-b2a', '--output-d=:', '-b1,9-',      {IN=>'123456789'},
+    {OUT=>"1:9\n"}],
+  ['big-unbounded-b2b', '--output-d=:', '-b1,1234567890-', {IN=>''}, {OUT=>''}],
   ['big-unbounded-c', '--output-d=:', '-c1234567890-', {IN=>''}, {OUT=>''}],
   ['big-unbounded-f', '--output-d=:', '-f1234567890-', {IN=>''}, {OUT=>''}],