From 5825889931f29f3583af9c1ff7e8796ae4497b72 Mon Sep 17 00:00:00 2001 From: Michael Debertol Date: Tue, 17 Aug 2021 15:35:14 +0200 Subject: [PATCH] chmod: correctly handle modes after -- --- src/uu/chmod/src/chmod.rs | 3 +++ tests/by-util/test_chmod.rs | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/uu/chmod/src/chmod.rs b/src/uu/chmod/src/chmod.rs index 6b165d198..60705526b 100644 --- a/src/uu/chmod/src/chmod.rs +++ b/src/uu/chmod/src/chmod.rs @@ -184,6 +184,9 @@ pub fn uu_app() -> App<'static, 'static> { // e.g. "chmod -v -xw -R FILE" -> "chmod -v xw -R FILE" pub fn strip_minus_from_mode(args: &mut Vec) -> bool { for arg in args { + if arg == "--" { + break; + } if arg.starts_with('-') { if let Some(second) = arg.chars().nth(1) { match second { diff --git a/tests/by-util/test_chmod.rs b/tests/by-util/test_chmod.rs index 5106b4fe6..9478c141b 100644 --- a/tests/by-util/test_chmod.rs +++ b/tests/by-util/test_chmod.rs @@ -532,3 +532,17 @@ fn test_no_operands() { .code_is(1) .stderr_is("chmod: missing operand"); } + +#[test] +fn test_mode_after_dash_dash() { + let (at, ucmd) = at_and_ucmd!(); + run_single_test( + &TestCase { + args: vec!["--", "-r", TEST_FILE], + before: 0o100777, + after: 0o100333, + }, + at, + ucmd, + ); +}