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