From 01ac6dfd186e380b848bfea56ae8e8b8485d53ab Mon Sep 17 00:00:00 2001 From: Will Shuttleworth Date: Mon, 16 Jun 2025 03:45:11 -0400 Subject: [PATCH] Merge pull request #8135 from willshuttleworth/stty-set-undefined stty: fix mappings with empty string literal args --- src/uu/stty/src/stty.rs | 2 +- tests/by-util/test_stty.rs | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/uu/stty/src/stty.rs b/src/uu/stty/src/stty.rs index e6ed38d2a..7866ecaad 100644 --- a/src/uu/stty/src/stty.rs +++ b/src/uu/stty/src/stty.rs @@ -598,7 +598,7 @@ fn apply_char_mapping(termios: &mut Termios, mapping: &(SpecialCharacterIndices, // // This function returns the ascii value of valid control chars, or ControlCharMappingError if invalid fn string_to_control_char(s: &str) -> Result { - if s == "undef" || s == "^-" { + if s == "undef" || s == "^-" || s.is_empty() { return Ok(0); } diff --git a/tests/by-util/test_stty.rs b/tests/by-util/test_stty.rs index 997336281..864888fc2 100644 --- a/tests/by-util/test_stty.rs +++ b/tests/by-util/test_stty.rs @@ -22,11 +22,11 @@ fn runs() { #[test] #[ignore = "Fails because cargo test does not run in a tty"] fn print_all() { - let res = new_ucmd!().succeeds(); + let res = new_ucmd!().args(&["--all"]).succeeds(); // Random selection of flags to check for for flag in [ - "parenb", "parmrk", "ixany", "iuclc", "onlcr", "ofdel", "icanon", "noflsh", + "parenb", "parmrk", "ixany", "onlcr", "ofdel", "icanon", "noflsh", ] { res.stdout_contains(flag); } @@ -167,3 +167,37 @@ fn invalid_baud_setting() { .fails() .stderr_contains("invalid ospeed '995'"); } + +#[test] +#[ignore = "Fails because cargo test does not run in a tty"] +fn set_mapping() { + new_ucmd!().args(&["intr", "'"]).succeeds(); + new_ucmd!() + .args(&["--all"]) + .succeeds() + .stdout_contains("intr = '"); + + new_ucmd!().args(&["intr", "undef"]).succeeds(); + new_ucmd!() + .args(&["--all"]) + .succeeds() + .stdout_contains("intr = "); + + new_ucmd!().args(&["intr", "^-"]).succeeds(); + new_ucmd!() + .args(&["--all"]) + .succeeds() + .stdout_contains("intr = "); + + new_ucmd!().args(&["intr", ""]).succeeds(); + new_ucmd!() + .args(&["--all"]) + .succeeds() + .stdout_contains("intr = "); + + new_ucmd!().args(&["intr", "^C"]).succeeds(); + new_ucmd!() + .args(&["--all"]) + .succeeds() + .stdout_contains("intr = ^C"); +}