1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-29 20:17:45 +00:00

Merge pull request #5163 from cakebaker/nl_handle_line_number_overflow

nl: handle line number overflow
This commit is contained in:
Daniel Hofstetter 2023-08-19 14:37:30 +02:00 committed by GitHub
commit f9d81b2aa8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View file

@ -344,7 +344,10 @@ fn nl<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UResult<()> {
line
);
// update line number for the potential next line
line_no += settings.line_increment;
match line_no.checked_add(settings.line_increment) {
Some(new_line_no) => line_no = new_line_no,
None => return Err(USimpleError::new(1, "line number overflow")),
}
} else {
let spaces = " ".repeat(settings.number_width + 1);
println!("{spaces}{line}");

View file

@ -464,3 +464,21 @@ fn test_invalid_regex_numbering() {
.stderr_contains("invalid regular expression");
}
}
#[test]
fn test_line_number_overflow() {
new_ucmd!()
.arg(format!("--starting-line-number={}", i64::MAX))
.pipe_in("a\nb")
.fails()
.stdout_is(format!("{}\ta\n", i64::MAX))
.stderr_is("nl: line number overflow\n");
new_ucmd!()
.arg(format!("--starting-line-number={}", i64::MIN))
.arg("--line-increment=-1")
.pipe_in("a\nb")
.fails()
.stdout_is(format!("{}\ta\n", i64::MIN))
.stderr_is("nl: line number overflow\n");
}