Skip to content

Commit 58266a8

Browse files
committed
date: handle the empty arguments
1 parent 0bfbbc0 commit 58266a8

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

fuzz/fuzz_targets/fuzz_date.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,24 @@ use libfuzzer_sys::fuzz_target;
33

44
use std::ffi::OsString;
55
use uu_date::uumain;
6+
use uufuzz::generate_and_run_uumain;
67

78
fuzz_target!(|data: &[u8]| {
89
let delim: u8 = 0; // Null byte
9-
let args = data
10+
let args: Vec<OsString> = data
1011
.split(|b| *b == delim)
1112
.filter_map(|e| std::str::from_utf8(e).ok())
12-
.map(OsString::from);
13-
uumain(args);
13+
.map(OsString::from)
14+
.collect();
15+
16+
// Ensure we have at least a program name
17+
if args.is_empty() {
18+
return;
19+
}
20+
21+
let date_main = |args: std::vec::IntoIter<OsString>| -> i32 {
22+
uumain(args)
23+
};
24+
25+
let _ = generate_and_run_uumain(&args, date_main, None);
1426
});

tests/by-util/test_date.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ fn test_invalid_arg() {
1717
new_ucmd!().arg("--definitely-invalid").fails_with_code(1);
1818
}
1919

20+
#[test]
21+
fn test_empty_arguments() {
22+
new_ucmd!().arg("").fails_with_code(1);
23+
new_ucmd!().args(&["", ""]).fails_with_code(1);
24+
new_ucmd!().args(&["", "", ""]).fails_with_code(1);
25+
}
26+
2027
#[test]
2128
fn test_date_email() {
2229
for param in ["--rfc-email", "--rfc-e", "-R", "--rfc-2822", "--rfc-822"] {

0 commit comments

Comments
 (0)