summaryrefslogtreecommitdiff
path: root/fuzz/atom/parser/fuzz.rs
diff options
context:
space:
mode:
authorJohn Turner <jturnerusa@noreply@epenguin.net>2025-12-14 19:42:50 -0600
committerJohn Turner <jturnerusa@noreply@epenguin.net>2025-12-14 19:42:50 -0600
commit52ce39d579e8ef0e6427b097ee0d53c692d6bc55 (patch)
treea2911b7eae9b2ab3318849a6cdceed3d355acd05 /fuzz/atom/parser/fuzz.rs
parentc25294333ba4ac619fff5e65c712edeb592375f5 (diff)
parent7348681b6559c6d623fd47fbc656f924e9c7bcdc (diff)
downloadgentoo-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/parser/fuzz.rs')
-rw-r--r--fuzz/atom/parser/fuzz.rs52
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")