diff --git a/src/uu/pr/src/pr.rs b/src/uu/pr/src/pr.rs index 29acf48dfa..2a216c7b30 100644 --- a/src/uu/pr/src/pr.rs +++ b/src/uu/pr/src/pr.rs @@ -703,9 +703,17 @@ fn build_options( let invalid_pages_map = |i: String| { let unparsed_value = matches.get_one::(options::PAGES).unwrap(); - i.parse::().map_err(|_e| PrError::EncounteredErrors { + let parsed_value = i.parse::().map_err(|_e| PrError::EncounteredErrors { msg: format!("invalid --pages argument {}", unparsed_value.quote()), - }) + }); + + match parsed_value { + Ok(0) => Err(PrError::EncounteredErrors { + msg: "invalid --pages argument '0'".to_string(), + }), + Ok(res) => Ok(res), + Err(e) => Err(e), + } }; let res = matches @@ -750,6 +758,12 @@ fn build_options( let page_length = parse_usize(matches, options::PAGE_LENGTH).unwrap_or(Ok(default_lines_per_page))?; + if page_length == 0 { + return Err(PrError::EncounteredErrors { + msg: "invalid --length argument '0'".to_string(), + }); + } + let page_length_le_ht = page_length < (HEADER_LINES_PER_PAGE + TRAILER_LINES_PER_PAGE); let display_header_and_trailer = !page_length_le_ht diff --git a/tests/by-util/test_pr.rs b/tests/by-util/test_pr.rs index b7d500e6af..84e3acb160 100644 --- a/tests/by-util/test_pr.rs +++ b/tests/by-util/test_pr.rs @@ -946,3 +946,19 @@ fn test_zero_page_width() { .fails_with_code(1) .stderr_is("pr: invalid --page-width argument '0'\n"); } + +#[test] +fn test_zero_length() { + new_ucmd!() + .args(&["-l", "0"]) + .fails_with_code(1) + .stderr_is("pr: invalid --length argument '0'\n"); +} + +#[test] +fn test_zero_pages() { + new_ucmd!() + .args(&["--pages", "0"]) + .fails_with_code(1) + .stderr_is("pr: invalid --pages argument '0'\n"); +}