1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-27 19:17:43 +00:00

Merge pull request #7742 from BenWiederhake/dev-du-block-size-0

du: don't panic on block-size 0
This commit is contained in:
Sylvestre Ledru 2025-04-12 23:35:09 +02:00 committed by GitHub
commit 689aaf9474
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 5 deletions

View file

@ -683,11 +683,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
} else if matches.get_flag(options::BLOCK_SIZE_1M) {
SizeFormat::BlockSize(1024 * 1024)
} else {
SizeFormat::BlockSize(read_block_size(
matches
.get_one::<String>(options::BLOCK_SIZE)
.map(AsRef::as_ref),
)?)
let block_size_str = matches.get_one::<String>(options::BLOCK_SIZE);
let block_size = read_block_size(block_size_str.map(AsRef::as_ref))?;
if block_size == 0 {
return Err(std::io::Error::other(format!(
"invalid --{} argument {}",
options::BLOCK_SIZE,
block_size_str.map_or("???BUG", |v| v).quote()
))
.into());
}
SizeFormat::BlockSize(block_size)
};
let traversal_options = TraversalOptions {

View file

@ -1248,3 +1248,19 @@ fn test_du_no_deduplicated_input_args() {
.collect();
assert_eq!(result_seq, ["2\td", "2\td", "2\td"]);
}
#[test]
fn test_du_blocksize_zero_do_not_panic() {
let ts = TestScenario::new(util_name!());
let at = &ts.fixtures;
at.write("foo", "some content");
for block_size in ["0", "00", "000", "0x0"] {
ts.ucmd()
.arg(format!("-B{block_size}"))
.arg("foo")
.fails()
.stderr_only(format!(
"du: invalid --block-size argument '{block_size}'\n"
));
}
}