summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2012-11-23 23:09:10 -0800
committerJim Meyering <jim@meyering.net>2012-11-24 15:23:28 -0800
commit1b874511b60252a5c71c7a29046afdc99e5391bb (patch)
tree0479d0d9ae8111f1007e94b5c62679d4bb5658ab
parent6f374d7c4285d23eb09b5386a5feb94aa25126bb (diff)
downloadcoreutils-1b874511b60252a5c71c7a29046afdc99e5391bb.tar.xz
cut: treat -b2-,3- like -b2-, not like -b3-
* src/cut.c (set_fields): When two right-open-ended ranges are specified, don't blindly let the latter one take precedence over the former. Instead, use the union of the ranges. * tests/misc/cut.pl: Add tests to exercise this. * NEWS (Bug fixes): Mention it. Reported by Marcel Böhme in http://bugs.gnu.org/12966 Thanks to Berhard Voelker for catching log and NEWS typos.
-rw-r--r--NEWS4
-rw-r--r--src/cut.c6
-rwxr-xr-xtests/misc/cut.pl3
3 files changed, 11 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 8529216af..63583c1a7 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,10 @@ GNU coreutils NEWS -*- outline -*-
Instead, cut now fails and emits an appropriate diagnostic.
[This bug was present in "the beginning".]
+ cut now handles overlapping to-EOL ranges properly. Before, it would
+ interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-".
+ [This bug was present in "the beginning".]
+
install -m M SOURCE DEST no longer has a race condition where DEST's
permissions are temporarily derived from SOURCE instead of from M.
diff --git a/src/cut.c b/src/cut.c
index 2a571483a..b464840d7 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -391,8 +391,10 @@ set_fields (const char *fieldstr)
In any case, 'initial' contains the start of the range. */
if (!rhs_specified)
{
- /* 'n-'. From 'initial' to end of line. */
- eol_range_start = initial;
+ /* 'n-'. From 'initial' to end of line. If we've already
+ seen an M- range, ignore subsequent N- unless N < M. */
+ if (eol_range_start == 0 || initial < eol_range_start)
+ eol_range_start = initial;
field_found = true;
}
else
diff --git a/tests/misc/cut.pl b/tests/misc/cut.pl
index cd5655569..cb4781a7d 100755
--- a/tests/misc/cut.pl
+++ b/tests/misc/cut.pl
@@ -163,6 +163,9 @@ my @Tests =
['big-unbounded-b', '--output-d=:', '-b1234567890-', {IN=>''}, {OUT=>''}],
['big-unbounded-c', '--output-d=:', '-c1234567890-', {IN=>''}, {OUT=>''}],
['big-unbounded-f', '--output-d=:', '-f1234567890-', {IN=>''}, {OUT=>''}],
+
+ ['overlapping-unbounded-1', '-b3-,2-', {IN=>"1234\n"}, {OUT=>"234\n"}],
+ ['overlapping-unbounded-2', '-b2-,3-', {IN=>"1234\n"}, {OUT=>"234\n"}],
);
if ($mb_locale ne 'C')