// This file is auto-generated by gen_target.sh based on target_template.txt // To modify it, modify target_template.txt and run gen_target.sh instead. #![cfg_attr(feature = "libfuzzer_fuzz", no_main)] extern crate lightning_fuzz; use lightning_fuzz::TARGET_MOD::*; use std::fs; use std::io::Read; #[cfg(feature = "afl")] #[macro_use] extern crate afl; #[cfg(feature = "afl")] fn main() { fuzz!(|data| { TARGET_NAME_run(data.as_ptr(), data.len()); }); } #[cfg(feature = "honggfuzz")] #[macro_use] extern crate honggfuzz; #[cfg(feature = "honggfuzz")] fn main() { loop { fuzz!(|data| { TARGET_NAME_run(data.as_ptr(), data.len()); }); } } #[cfg(feature = "libfuzzer_fuzz")] #[macro_use] extern crate libfuzzer_sys; #[cfg(feature = "libfuzzer_fuzz")] fuzz_target!(|data: &[u8]| { TARGET_NAME_run(data.as_ptr(), data.len()); }); #[cfg(feature = "stdin_fuzz")] fn main() { let mut data = Vec::with_capacity(8192); std::io::stdin().read_to_end(&mut data).unwrap(); TARGET_NAME_run(data.as_ptr(), data.len()); } #[test] fn run_test_cases() { use lightning_fuzz::utils::test_logger::StringBuffer; use std::sync::{atomic, Arc}; { let data: Vec = vec![0]; TARGET_NAME_run(data.as_ptr(), data.len()); } let mut threads = Vec::new(); let threads_running = Arc::new(atomic::AtomicUsize::new(0)); if let Ok(tests) = fs::read_dir("test_cases/TARGET_NAME") { for test in tests { let mut data: Vec = Vec::new(); let path = test.unwrap().path(); fs::File::open(&path).unwrap().read_to_end(&mut data).unwrap(); threads_running.fetch_add(1, atomic::Ordering::AcqRel); let thread_count_ref = Arc::clone(&threads_running); let main_thread_ref = std::thread::current(); threads.push((path.file_name().unwrap().to_str().unwrap().to_string(), std::thread::spawn(move || { let string_logger = StringBuffer::new(); let panic_logger = string_logger.clone(); let res = if ::std::panic::catch_unwind(move || { TARGET_NAME_test(&data, panic_logger); }).is_err() { Some(string_logger.into_string()) } else { None }; thread_count_ref.fetch_sub(1, atomic::Ordering::AcqRel); main_thread_ref.unpark(); res }) )); while threads_running.load(atomic::Ordering::Acquire) > 32 { std::thread::park(); } } } for (test, thread) in threads.drain(..) { if let Some(output) = thread.join().unwrap() { println!("Output of {}:\n{}", test, output); panic!(); } } }