summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2015-12-13 02:14:06 +0000
committerPádraig Brady <P@draigBrady.com>2015-12-14 13:40:51 +0000
commit872c0df857d322f8119c64853d042f17c1913c3a (patch)
treec81e8e0ff1b73ff1dbfc6d99da4ab706a25e7b8a
parent1118f32145049cc4b949e89eda89a0ed612755de (diff)
downloadcoreutils-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--NEWS4
-rw-r--r--src/sort.c3
-rwxr-xr-xtests/misc/sort-debug-keys.sh7
3 files changed, 13 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 5941e20c2..2731298ea 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 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