From 06aeeecb3fe2655fd5e4e12948b389873a79884b Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sat, 24 Nov 2012 11:36:15 -0800 Subject: cut: do not print extraneous delimiters in some unusual cases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When printing output delimiters, and when a to-EOL range subsumes at least one other range, cut would mistakenly print delimiters for the subsumed range. This bug was probably introduced via commit v5.2.1-639-g847e066. * src/cut.c (set_fields): Ignore any range that is subsumed by a to-EOL range. Also, move two declarations down. * 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 --- src/cut.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/cut.c b/src/cut.c index b464840d7..4219d24e9 100644 --- a/src/cut.c +++ b/src/cut.c @@ -514,17 +514,18 @@ set_fields (const char *fieldstr) /* Set the array entries corresponding to integers in the ranges of RP. */ for (i = 0; i < n_rp; i++) { - size_t j; - size_t rsi_candidate; + /* Ignore any range that is subsumed by the to-EOL range. */ + if (eol_range_start && eol_range_start <= rp[i].lo) + continue; /* Record the range-start indices, i.e., record each start index that is not part of any other (lo..hi] range. */ - rsi_candidate = complement ? rp[i].hi + 1 : rp[i].lo; + size_t rsi_candidate = complement ? rp[i].hi + 1 : rp[i].lo; if (output_delimiter_specified && !is_printable_field (rsi_candidate)) mark_range_start (rsi_candidate); - for (j = rp[i].lo; j <= rp[i].hi; j++) + for (size_t j = rp[i].lo; j <= rp[i].hi; j++) mark_printable_field (j); } -- cgit v1.2.3-54-g00ecf