diff options
author | Pádraig Brady <P@draigBrady.com> | 2015-12-13 02:14:06 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2015-12-14 13:40:51 +0000 |
commit | 872c0df857d322f8119c64853d042f17c1913c3a (patch) | |
tree | c81e8e0ff1b73ff1dbfc6d99da4ab706a25e7b8a | |
parent | 1118f32145049cc4b949e89eda89a0ed612755de (diff) | |
download | coreutils-872c0df857d322f8119c64853d042f17c1913c3a.tar.xz |
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
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | src/sort.c | 3 | ||||
-rwxr-xr-x | tests/misc/sort-debug-keys.sh | 7 |
3 files changed, 13 insertions, 1 deletions
@@ -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 cf29727de..37b3b8b8f 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 a0a287401..fadd19c6a 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 |