From 1ba0bfc67a67288aa21736705841292fae030a4c Mon Sep 17 00:00:00 2001 From: Junji Wei Date: Thu, 9 Jun 2022 14:48:05 +0800 Subject: [PATCH 1/2] mktemp: respect POSIXLY_CORRECT env var when parsing args Signed-off-by: Junji Wei --- src/uu/mktemp/src/mktemp.rs | 25 +++++++++++++++++++++++-- tests/by-util/test_mktemp.rs | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index 6a848b7ad19..c3525651295 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -53,9 +53,14 @@ enum MkTempError { /// The template suffix contains a path separator (e.g. `"XXXa/b"`). SuffixContainsDirSeparator(String), InvalidTemplate(String), + TooManyTemplates, } -impl UError for MkTempError {} +impl UError for MkTempError { + fn usage(&self) -> bool { + matches!(self, Self::TooManyTemplates) + } +} impl Error for MkTempError {} @@ -85,6 +90,9 @@ impl Display for MkTempError { "invalid template, {}; with --tmpdir, it may not be absolute", s.quote() ), + TooManyTemplates => { + write!(f, "too many templates") + } } } } @@ -308,11 +316,24 @@ impl Params { #[uucore::main] pub fn uumain(args: impl uucore::Args) -> UResult<()> { - let matches = uu_app().try_get_matches_from(args)?; + let args = args.collect_str_lossy().accept_any(); + + let matches = uu_app().try_get_matches_from(&args)?; // Parse command-line options into a format suitable for the // application logic. let options = Options::from(&matches); + + if env::var("POSIXLY_CORRECT").is_ok() { + // If POSIXLY_CORRECT was set, template MUST be the last argument. + if is_tmpdir_argument_actually_the_template(&matches) || matches.is_present(ARG_TEMPLATE) { + // Template argument was provided, check if was the last one. + if args.last().unwrap() != &options.template { + return Err(Box::new(MkTempError::TooManyTemplates)); + } + } + } + let dry_run = options.dry_run; let suppress_file_err = options.quiet; let make_dir = options.directory; diff --git a/tests/by-util/test_mktemp.rs b/tests/by-util/test_mktemp.rs index 79ff9271d6a..9e4a2742cd8 100644 --- a/tests/by-util/test_mktemp.rs +++ b/tests/by-util/test_mktemp.rs @@ -641,3 +641,25 @@ fn test_suffix_empty_template() { .fails() .stderr_is("mktemp: with --suffix, template '' must end in X\n"); } + +#[test] +fn test_mktemp_with_posixly_correct() { + let scene = TestScenario::new(util_name!()); + + scene + .ucmd() + .env("POSIXLY_CORRECT", "1") + .args(&["aXXXX", "--suffix=b"]) + .fails() + .stderr_is(&format!( + "mktemp: too many templates\nTry '{} {} --help' for more information.\n", + scene.bin_path.to_string_lossy(), + scene.util_name + )); + + scene + .ucmd() + .env("POSIXLY_CORRECT", "1") + .args(&["--suffix=b", "aXXXX"]) + .succeeds(); +} From 435984713a9cddec2c0a24b0a71a964b23d49bd3 Mon Sep 17 00:00:00 2001 From: Jan Scheer Date: Thu, 9 Jun 2022 18:42:27 +0200 Subject: [PATCH 2/2] test_tail: increase delay for test_follow_name_move_create2 Increase delay for this test to be more resillient against load-jitter on the CI test VMs. --- tests/by-util/test_tail.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/by-util/test_tail.rs b/tests/by-util/test_tail.rs index 3b809114f56..2f8ca4a7890 100644 --- a/tests/by-util/test_tail.rs +++ b/tests/by-util/test_tail.rs @@ -1877,10 +1877,10 @@ fn test_follow_name_move_create2() { "9", ]; - let delay = 300; + let mut delay = 500; for _ in 0..2 { let mut p = ts.ucmd().set_stdin(Stdio::null()).args(&args).run_no_wait(); - sleep(Duration::from_millis(100)); + sleep(Duration::from_millis(delay)); at.truncate("9", "x\n"); sleep(Duration::from_millis(delay)); @@ -1916,6 +1916,7 @@ fn test_follow_name_move_create2() { at.remove("f"); args.push("---disable-inotify"); + delay = 2000; } }