diff options
| author | John Turner <jturnerusa@noreply@epenguin.net> | 2025-12-14 19:42:50 -0600 |
|---|---|---|
| committer | John Turner <jturnerusa@noreply@epenguin.net> | 2025-12-14 19:42:50 -0600 |
| commit | 52ce39d579e8ef0e6427b097ee0d53c692d6bc55 (patch) | |
| tree | a2911b7eae9b2ab3318849a6cdceed3d355acd05 /fuzz/atom | |
| parent | c25294333ba4ac619fff5e65c712edeb592375f5 (diff) | |
| parent | 7348681b6559c6d623fd47fbc656f924e9c7bcdc (diff) | |
| download | gentoo-utils-52ce39d579e8ef0e6427b097ee0d53c692d6bc55.tar.gz | |
Merge pull request 'feature/remove-statics-from-parser-fuzzer' (#13) from feature/remove-statics-from-parser-fuzzer into master
Reviewed-on: https://git.epenguin.net/gentoo-utils/gentoo-utils-gitea/pulls/13
Reviewed-by: penguin <penguin@epenguin.net>
Diffstat (limited to 'fuzz/atom')
| -rw-r--r-- | fuzz/atom/parser/fuzz.rs | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/fuzz/atom/parser/fuzz.rs b/fuzz/atom/parser/fuzz.rs index 83d5787..b727c24 100644 --- a/fuzz/atom/parser/fuzz.rs +++ b/fuzz/atom/parser/fuzz.rs @@ -4,25 +4,12 @@ use core::slice; use gentoo_utils::{Parseable, atom::Atom}; use std::{ + env::{self}, io::{self, Write}, - sync::{LazyLock, Mutex}, }; -#[derive(Debug)] -struct State { - input: io::Stdin, - output: io::Stdout, -} - #[unsafe(no_mangle)] pub unsafe extern "C" fn LLVMFuzzerTestOneInput(input: *const u8, len: usize) -> i32 { - static PIPES: LazyLock<Mutex<State>> = LazyLock::new(|| { - Mutex::new(State { - input: io::stdin(), - output: io::stdout(), - }) - }); - let slice = unsafe { slice::from_raw_parts(input, len) }; let str = str::from_utf8(slice).expect("expected ascii input"); @@ -30,13 +17,13 @@ pub unsafe extern "C" fn LLVMFuzzerTestOneInput(input: *const u8, len: usize) -> return -1; } - let mut state = PIPES.lock().unwrap(); - - writeln!(&mut state.output, "{str}").unwrap(); - + let stdin = io::stdin(); + let mut stdout = io::stdout(); let mut buffer = String::new(); - state.input.read_line(&mut buffer).unwrap(); + writeln!(&mut stdout, "{str}").unwrap(); + + stdin.read_line(&mut buffer).unwrap(); let control = match buffer.as_str().trim() { "0" => Ok(()), @@ -48,23 +35,32 @@ pub unsafe extern "C" fn LLVMFuzzerTestOneInput(input: *const u8, len: usize) -> match (control, gentoo_utils) { (Ok(_), Ok(_)) => { - eprintln!("agreement that {str} is valid"); + if env::var("FUZZER_LOG").is_ok() { + eprintln!("agreement that {str} is valid"); + } } (Err(_), Err(_)) => { - eprintln!("agreement that {str} is invalid"); + if env::var("FUZZER_LOG").is_ok() { + eprintln!("agreement that {str} is invalid"); + } } (Ok(_), Err(rest)) => { panic!("disagreement on {str}\ncontrol:Ok\ngentoo-utils:Err({rest})"); } (Err(_), Ok(atom)) - if atom - .usedeps() - .iter() - .any(|usedep| atom.usedeps().iter().filter(|u| usedep == *u).count() > 1) => + if atom.usedeps().iter().any(|usedep| { + atom.usedeps() + .iter() + .filter(|u| *usedep.flag() == *u.flag()) + .count() + > 1 + }) => { - eprintln!( - "disagreement, but we will allow it since its probably because of duplicated usdeps" - ); + if env::var("FUZZER_LOG").is_ok() { + eprintln!( + "disagreement, but we will allow it since its probably because of duplicated usdeps" + ); + } } (Err(_), Ok(_)) => { panic!("disagreement on {str}\ncontrol:Err\ngentoo-utils:Ok") |
