diff --git a/src/uu/du/src/du.rs b/src/uu/du/src/du.rs index c35bbf119..cab9da227 100644 --- a/src/uu/du/src/du.rs +++ b/src/uu/du/src/du.rs @@ -913,6 +913,11 @@ impl FromStr for Threshold { let size = parse_size(&s[offset..])?; if s.starts_with('-') { + // Threshold of '-0' excludes everything besides 0 sized entries + // GNU's du treats '-0' as an invalid argument + if size == 0 { + return Err(ParseSizeError::ParseFailure(s.to_string())); + } Ok(Self::Upper(size)) } else { Ok(Self::Lower(size)) diff --git a/tests/by-util/test_du.rs b/tests/by-util/test_du.rs index 5d0c23f78..d69eaaf99 100644 --- a/tests/by-util/test_du.rs +++ b/tests/by-util/test_du.rs @@ -546,6 +546,15 @@ fn test_du_threshold() { .stdout_contains("deeper_dir"); } +#[test] +fn test_du_invalid_threshold() { + let ts = TestScenario::new(util_name!()); + + let threshold = "-0"; + + ts.ucmd().arg(format!("--threshold={threshold}")).fails(); +} + #[test] fn test_du_apparent_size() { let ts = TestScenario::new(util_name!());