← Commit list

f02041441

Ron Yorston
Ron Yorston
2024-12-10
SUCCESS Duration: 156s

Subject

cut: improve detection of invalid ranges

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

coreutils/cut.c+8 -11
@@ -278,29 +278,26 @@ int cut_main(int argc UNUSED_PARAM, char **argv)
if (!ntok[0]) {
s = 0;
} else {
- s = xatoi_positive(ntok);
/* account for the fact that arrays are zero based, while
* the user expects the first char on the line to be char #1 */
- if (s != 0)
- s--;
+ s = xatoi_positive(ntok) - 1;
}
/* get the end pos */
if (ltok == NULL) {
e = s;
} else if (!ltok[0]) {
+ /* if the user specified no end position,
+ * that means "til the end of the line" */
e = INT_MAX;
} else {
- e = xatoi_positive(ltok);
- /* if the user specified and end position of 0,
- * that means "til the end of the line" */
- if (!*ltok)
- e = INT_MAX;
- else if (e < s)
- bb_error_msg_and_die("%d<%d", e, s);
- e--; /* again, arrays are zero based, lines are 1 based */
+ /* again, arrays are zero based, lines are 1 based */
+ e = xatoi_positive(ltok) - 1;
}
+ if (s < 0 || e < s)
+ bb_error_msg_and_die("invalid range %s-%s", ntok, ltok ?: ntok);
+
/* add the new list */
cut_lists = xrealloc_vector(cut_lists, 4, nlists);
/* NB: startpos is always >= 0 */
testsuite/cut.tests+4 -1
@@ -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" ""