fuzzing: print the diff in case of issue (#5866)

* fuzzing: print the diff in case of issue

* Simplify the code

* fuzz: remove unused import similar::ChangeTag

---------

Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
This commit is contained in:
Sylvestre Ledru 2024-01-22 08:06:13 +01:00 committed by GitHub
parent 5f28b5005e
commit 8493800d4f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 0 deletions

View file

@ -12,6 +12,7 @@ libfuzzer-sys = "0.4"
libc = "0.2"
tempfile = "3"
rand = { version = "0.8", features = ["small_rng"] }
similar = "2"
uucore = { path = "../src/uucore/" }
uu_date = { path = "../src/uu/date/" }

View file

@ -7,6 +7,7 @@ use libc::STDIN_FILENO;
use libc::{close, dup, dup2, pipe, STDERR_FILENO, STDOUT_FILENO};
use rand::prelude::SliceRandom;
use rand::Rng;
use similar::TextDiff;
use std::ffi::OsString;
use std::io::{Seek, SeekFrom, Write};
use std::os::fd::{AsRawFd, RawFd};
@ -321,12 +322,14 @@ pub fn compare_result(
discrepancies.push("stdout differs");
println!("Rust stdout: {}", rust_result.stdout);
println!("GNU stdout: {}", gnu_result.stdout);
print_diff(&rust_result.stdout, &gnu_result.stdout);
should_panic = true;
}
if rust_result.stderr.trim() != gnu_result.stderr.trim() {
discrepancies.push("stderr differs");
println!("Rust stderr: {}", rust_result.stderr);
println!("GNU stderr: {}", gnu_result.stderr);
print_diff(&rust_result.stderr, &gnu_result.stderr);
if fail_on_stderr_diff {
should_panic = true;
}
@ -353,6 +356,16 @@ pub fn compare_result(
}
}
/// When we have different outputs, print the diff
fn print_diff(rust_output: &str, gnu_output: &str) {
println!("Diff=");
let diff = TextDiff::from_lines(rust_output, gnu_output);
for change in diff.iter_all_changes() {
print!("{}{}", change.tag(), change);
}
println!();
}
pub fn generate_random_string(max_length: usize) -> String {
let mut rng = rand::thread_rng();
let valid_utf8: Vec<char> = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"