From: Pádraig Brady Date: Sat, 31 Dec 2022 17:03:39 +0000 (+0000) Subject: stty: fix off by one column wrapping on output X-Git-Tag: v9.2~99 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c9a21ec3173b93de4839e5ff9eddadb020431656;p=thirdparty%2Fcoreutils.git 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 --- 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