From: Pádraig Brady Date: Sun, 13 Dec 2015 02:14:06 +0000 (+0000) Subject: sort: fix --debug marking for -b -k1.x X-Git-Tag: v8.25~59 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=872c0df857d322f8119c64853d042f17c1913c3a;p=thirdparty%2Fcoreutils.git sort: fix --debug marking for -b -k1.x We were erroneously skipping blanks in the marked comparison _after_ the key start offset was applied. * src/sort.c (debug_keys): Don't skip starting blanks if already handled by begfield(). * tests/misc/sort-debug-keys.sh: Add a test case. * NEWS: Mention the bug fix. Fixes http://bugs.gnu.org/22155 --- diff --git a/NEWS b/NEWS index 5941e20c24..2731298ea7 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,10 @@ GNU coreutils NEWS -*- outline -*- shred again uses defined patterns for all iteration counts. [bug introduced in coreutils-5.93] + sort --debug -b now correctly marks the matching extents for keys + that specify an offset for the first field. + [bug introduced with the --debug feature in coreutils-8.6] + ** New commands base32 is added to complement the existing base64 command, diff --git a/src/sort.c b/src/sort.c index cf29727de3..37b3b8b8ff 100644 --- a/src/sort.c +++ b/src/sort.c @@ -2274,7 +2274,8 @@ debug_key (struct line const *line, struct keyfield const *key) if (key->eword != SIZE_MAX) lim = limfield (line, key); - if (key->skipsblanks || key->month || key_numeric (key)) + if ((key->skipsblanks && key->sword == SIZE_MAX) + || key->month || key_numeric (key)) { char saved = *lim; *lim = '\0'; diff --git a/tests/misc/sort-debug-keys.sh b/tests/misc/sort-debug-keys.sh index a0a287401d..fadd19c6ac 100755 --- a/tests/misc/sort-debug-keys.sh +++ b/tests/misc/sort-debug-keys.sh @@ -238,6 +238,10 @@ A>chr10 ^ no match for key B>chr1 ^ no match for key +1 2 + __ +1 3 + __ EOF ( @@ -282,6 +286,9 @@ printf '\0\ta\n' | sort -s -k2b,2 --debug | tr -d '\0' # Check that key end before key start is not underlined printf 'A\tchr10\nB\tchr1\n' | sort -s -k2.4b,2.3n --debug + +# Ensure that -b applied before -k offsets +printf '1 2\n1 3\n' | sort -s -k1.2b --debug ) > out compare exp out || fail=1