From 5c2ae5be4f2a5255481fc3e091a86ded4773fdaf Mon Sep 17 00:00:00 2001 From: BaherSalama <89582037+BaherSalama@users.noreply.github.com> Date: Tue, 6 Feb 2024 17:42:08 +0200 Subject: [PATCH] fix tr with delete flag if more than 1 operand given (#5945) * fix tr * fix * adding a test * tr: rename test function --------- Co-authored-by: Daniel Hofstetter --- src/uu/tr/src/tr.rs | 7 +++++++ tests/by-util/test_tr.rs | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/uu/tr/src/tr.rs b/src/uu/tr/src/tr.rs index 28b99a10f..1d8f9a6e4 100644 --- a/src/uu/tr/src/tr.rs +++ b/src/uu/tr/src/tr.rs @@ -61,6 +61,13 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { )); } + if delete_flag && !squeeze_flag && sets_len > 1 { + return Err(UUsageError::new( + 1, + format!("extra operand {}\nOnly one string may be given when deleting without squeezing repeats.", sets[1].quote()), + )); + } + if let Some(first) = sets.first() { if first.ends_with('\\') { show!(USimpleError::new( diff --git a/tests/by-util/test_tr.rs b/tests/by-util/test_tr.rs index 01d062cab..e9bb4da0e 100644 --- a/tests/by-util/test_tr.rs +++ b/tests/by-util/test_tr.rs @@ -1147,3 +1147,15 @@ fn check_against_gnu_tr_tests_no_abort_1() { .succeeds() .stdout_is("abb"); } + +#[test] +fn test_delete_flag_takes_only_one_operand() { + // gnu tr -d fails with more than 1 argument + new_ucmd!() + .args(&["-d", "a", "p"]) + .pipe_in("abc") + .fails() + .stderr_contains( + "extra operand 'p'\nOnly one string may be given when deleting without squeezing repeats.", + ); +}