From: Pádraig Brady Date: Tue, 17 Jun 2025 22:32:05 +0000 (+0100) Subject: tests: stty: adjust tests for arbitary speeds X-Git-Tag: v9.8~301 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efaec8078142996d958b6720b85a13b12497c3d0;p=thirdparty%2Fcoreutils.git tests: stty: adjust tests for arbitary speeds * tests/stty/stty-invalid.sh: Adjust to what is now invalid. * tests/stty/stty.sh: Add checks for valid speed variants. * tests/stty/bad-speed.sh: New test to ensure unsupported speeds are diagnosed. --- diff --git a/tests/local.mk b/tests/local.mk index 642d225fa7..b68df41f76 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -425,6 +425,7 @@ all_tests = \ tests/stat/stat-printf.pl \ tests/stat/stat-slash.sh \ tests/misc/stdbuf.sh \ + tests/stty/bad-speed.sh \ tests/stty/stty.sh \ tests/stty/stty-invalid.sh \ tests/stty/stty-pairs.sh \ diff --git a/tests/stty/bad-speed.sh b/tests/stty/bad-speed.sh new file mode 100755 index 0000000000..d80d2e7c77 --- /dev/null +++ b/tests/stty/bad-speed.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# Ensure we handle cfsetispeed failing +# which we did not before coreutils v9.1 + +# Copyright (C) 2025 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src +print_ver_ stty +require_gcc_shared_ + +# Replace each cfsetispeed call with a call to these stubs. +cat > k.c <<'EOF' || framework_failure_ +#include +#include +#include +#include + +int cfsetispeed(struct termios *termios_p, speed_t speed) +{ + /* Leave a marker so we can identify if the function was intercepted. */ + fclose(fopen("preloaded", "w")); + + errno=EINVAL; + return -1; +} +EOF + +# Then compile/link it: +gcc_shared_ k.c k.so \ + || skip_ 'failed to build shared library' + +( export LD_PRELOAD=$LD_PRELOAD:./k.so + returns_ 1 stty ispeed 9600 ) || fail=1 + +test -e preloaded || skip_ 'LD_PRELOAD interception failed' + +Exit $fail diff --git a/tests/stty/stty-invalid.sh b/tests/stty/stty-invalid.sh index 4b87e2adf4..a1442a82d0 100755 --- a/tests/stty/stty-invalid.sh +++ b/tests/stty/stty-invalid.sh @@ -20,6 +20,7 @@ print_ver_ stty require_controlling_input_terminal_ require_trap_signame_ +getlimits_ trap '' TTOU # Ignore SIGTTOU @@ -50,8 +51,13 @@ if tty -s = 9.8 supports arbitrary speeds on some systems +# so restrict tests here to invalid numbers +# We simulate unsupported numbers in a separate "LD_PRELOAD" test. +WRAP_9600="$(expr $ULONG_OFLOW - 9600)" +for speed in 9600.. ++9600 -$WRAP_9600 --$WRAP_9600 0x2580 96E2; do + returns_ 1 stty ispeed "$speed" || fail=1 +done # Just in case either of the above mistakenly succeeds (and changes # the state of our tty), try to restore the initial state. diff --git a/tests/stty/stty.sh b/tests/stty/stty.sh index dab4cd0e71..c0f74947a3 100755 --- a/tests/stty/stty.sh +++ b/tests/stty/stty.sh @@ -95,4 +95,14 @@ for W in $(seq 80 90); do test "$output_width" -le "$W" || fail=1 done +# Ensure we support varied numeric forms +# with appropriate rounding +if stty ispeed '9600'; then + stty ispeed ' +9600' || fail=1 + stty ispeed '9600.49' || fail=1 + stty ispeed '9600.50' || fail=1 + stty ispeed '9599.51' || fail=1 + stty ispeed ' 9600.' || fail=1 +fi + Exit $fail