From c9a21ec3173b93de4839e5ff9eddadb020431656 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Sat, 31 Dec 2022 17:03:39 +0000 Subject: [PATCH] stty: fix off by one column wrapping on output * src/stty.c (wrapf): Adjust the comparison by 1, to account for the space we're adding. * tests/misc/stty.sh: Add a test case. * NEWS: Mention the fix. Reported in https://bugs.debian.org/1027442 --- NEWS | 4 ++++ src/stty.c | 2 +- tests/misc/stty.sh | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 0beaef5066..6b05c8d35a 100644 --- a/NEWS +++ b/NEWS @@ -32,6 +32,10 @@ GNU coreutils NEWS -*- outline -*- and the system supported set of valid speeds. [This bug was present in "the beginning".] + stty now wraps output appropriately for the terminal width. + Previously it may have output 1 character too wide for certain widths. + [bug introduced in coreutils-5.3] + `wc -c` will again efficiently determine the size of large files on all systems. It no longer redundantly reads data from certain sized files larger than SIZE_MAX. diff --git a/src/stty.c b/src/stty.c index b4c2cbecd6..f3c7915e11 100644 --- a/src/stty.c +++ b/src/stty.c @@ -519,7 +519,7 @@ wrapf (char const *message,...) if (0 < current_col) { - if (max_col - current_col < buflen) + if (max_col - current_col <= buflen) { putchar ('\n'); current_col = 0; diff --git a/tests/misc/stty.sh b/tests/misc/stty.sh index bcdc80e878..7abcec5af2 100755 --- a/tests/misc/stty.sh +++ b/tests/misc/stty.sh @@ -89,4 +89,10 @@ returns_ 1 strace -o log2 -e ioctl stty -blahblah || fail=1 n_ioctl2=$(wc -l < log2) || framework_failure_ test "$n_ioctl1" = "$n_ioctl2" || fail=1 +# Ensure we wrap output appropriately +for W in $(seq 80 90); do + output_width=$(COLUMNS="$W" stty -a | wc -L) + test "$output_width" -le "$W" || fail=1 +done + Exit $fail -- 2.47.2