From b2ad30bab23920704a34dc39b16db6fd5d91ea1e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 22 Oct 2024 09:15:18 +0100 Subject: cut: detect error when bounds are reversed The command 'cut -b 3-2' failed to detect that the bounds were incorrectly ordered, though the check worked when the difference between the bounds was larger. The comparison was made after the lower bound has been decremented but before the upper bound had. Adds 0-16 bytes. (GitHub issue #467) --- coreutils/cut.c | 7 +++++++ testsuite/cut.tests | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/coreutils/cut.c b/coreutils/cut.c index 067e69b12..8cae2eca3 100644 --- a/coreutils/cut.c +++ b/coreutils/cut.c @@ -291,9 +291,16 @@ int cut_main(int argc UNUSED_PARAM, char **argv) * that means "til the end of the line" */ if (!*ltok) e = INT_MAX; +#if !ENABLE_PLATFORM_MINGW32 else if (e < s) bb_error_msg_and_die("%d<%d", e, s); e--; /* again, arrays are zero based, lines are 1 based */ +#else + else if (e != 0) + e--; /* again, zero based arrays, one based lines */ + if (e < s) + bb_error_msg_and_die("%d<%d", e, s); +#endif } /* add the new list */ diff --git a/testsuite/cut.tests b/testsuite/cut.tests index 2458c019c..a31f41f7f 100755 --- a/testsuite/cut.tests +++ b/testsuite/cut.tests @@ -31,7 +31,10 @@ testing "-b encapsulated" "cut -b 3-8,4-6 input" "e:two:\npha:be\ne quic\n" \ #testing "cut -bO overlaps" \ # "cut --output-delimiter ' ' -b 1-3,2-5,7-9,9-10 input" \ # "one:t o:th\nalpha beta\nthe q ick \n" "$abc" "" -testing "cut high-low error" "cut -b 8-3 abc.txt 2>/dev/null || echo err" "err\n" \ +testing "cut high-low error" "cut -b 8-3 input 2>/dev/null || echo err" "err\n" \ + "$abc" "" + +testing "cut -b 2-1 error" "cut -b 2-1 input 2>/dev/null || echo err" "err\n" \ "$abc" "" testing "cut -c a-b" "cut -c 4-10 input" ":two:th\nha:beta\n quick \n" "$abc" "" -- cgit v1.2.3-55-g6feb