more generic reordering
This commit is contained in:
parent
3ddf4d4d23
commit
8e512a68b5
@ -63,7 +63,7 @@ where
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
unsafe {
|
unsafe {
|
||||||
set_oncrash_ptrs::<EM, C, OT, FT, I, R>(_state, _event_mgr, _input);
|
set_oncrash_ptrs::<C, EM, FT, I, OT, R>(_state, _event_mgr, _input);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ where
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
unsafe {
|
unsafe {
|
||||||
reset_oncrash_ptrs::<EM, C, OT, FT, I, R>();
|
reset_oncrash_ptrs::<C, EM, FT, I, OT, R>();
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ where
|
|||||||
{
|
{
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
unsafe {
|
unsafe {
|
||||||
setup_crash_handlers::<EM, C, OT, FT, I, R>();
|
setup_crash_handlers::<C, EM, FT, I, OT, R>();
|
||||||
}
|
}
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
@ -214,7 +214,7 @@ pub mod unix_signals {
|
|||||||
/// This is neede for certain non-rust side effects, as well as unix signal handling.
|
/// This is neede for certain non-rust side effects, as well as unix signal handling.
|
||||||
static mut CURRENT_INPUT_PTR: *const c_void = ptr::null();
|
static mut CURRENT_INPUT_PTR: *const c_void = ptr::null();
|
||||||
|
|
||||||
pub unsafe extern "C" fn libaflrs_executor_inmem_handle_crash<EM, C, OT, FT, I, R>(
|
pub unsafe extern "C" fn libaflrs_executor_inmem_handle_crash<C, EM, FT, I, OT, R>(
|
||||||
_sig: c_int,
|
_sig: c_int,
|
||||||
info: siginfo_t,
|
info: siginfo_t,
|
||||||
_void: c_void,
|
_void: c_void,
|
||||||
@ -257,7 +257,7 @@ pub mod unix_signals {
|
|||||||
std::process::exit(139);
|
std::process::exit(139);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe extern "C" fn libaflrs_executor_inmem_handle_timeout<EM, C, OT, FT, I, R>(
|
pub unsafe extern "C" fn libaflrs_executor_inmem_handle_timeout<C, EM, FT, I, OT, R>(
|
||||||
_sig: c_int,
|
_sig: c_int,
|
||||||
_info: siginfo_t,
|
_info: siginfo_t,
|
||||||
_void: c_void,
|
_void: c_void,
|
||||||
@ -308,7 +308,7 @@ pub mod unix_signals {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn set_oncrash_ptrs<EM, C, OT, FT, I, R>(
|
pub unsafe fn set_oncrash_ptrs<C, EM, FT, I, OT, R>(
|
||||||
state: &State<C, I, R, FT>,
|
state: &State<C, I, R, FT>,
|
||||||
event_mgr: &mut EM,
|
event_mgr: &mut EM,
|
||||||
input: &I,
|
input: &I,
|
||||||
@ -326,14 +326,14 @@ pub mod unix_signals {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn reset_oncrash_ptrs<EM, C, OT, FT, I, R>() {
|
pub unsafe fn reset_oncrash_ptrs<C, EM, FT, I, OT, R>() {
|
||||||
CURRENT_INPUT_PTR = ptr::null();
|
CURRENT_INPUT_PTR = ptr::null();
|
||||||
STATE_PTR = ptr::null();
|
STATE_PTR = ptr::null();
|
||||||
EVENT_MGR_PTR = ptr::null_mut();
|
EVENT_MGR_PTR = ptr::null_mut();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO clearly state that manager should be static (maybe put the 'static lifetime?)
|
// TODO clearly state that manager should be static (maybe put the 'static lifetime?)
|
||||||
pub unsafe fn setup_crash_handlers<EM, C, OT, FT, I, R>()
|
pub unsafe fn setup_crash_handlers<C, EM, FT, I, OT, R>()
|
||||||
where
|
where
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
C: Corpus<I, R>,
|
C: Corpus<I, R>,
|
||||||
@ -345,7 +345,7 @@ pub mod unix_signals {
|
|||||||
let mut sa: sigaction = mem::zeroed();
|
let mut sa: sigaction = mem::zeroed();
|
||||||
libc::sigemptyset(&mut sa.sa_mask as *mut libc::sigset_t);
|
libc::sigemptyset(&mut sa.sa_mask as *mut libc::sigset_t);
|
||||||
sa.sa_flags = SA_NODEFER | SA_SIGINFO;
|
sa.sa_flags = SA_NODEFER | SA_SIGINFO;
|
||||||
sa.sa_sigaction = libaflrs_executor_inmem_handle_crash::<EM, C, OT, FT, I, R> as usize;
|
sa.sa_sigaction = libaflrs_executor_inmem_handle_crash::<C, EM, FT, I, OT, R> as usize;
|
||||||
for (sig, msg) in &[
|
for (sig, msg) in &[
|
||||||
(SIGSEGV, "segfault"),
|
(SIGSEGV, "segfault"),
|
||||||
(SIGBUS, "sigbus"),
|
(SIGBUS, "sigbus"),
|
||||||
@ -359,7 +359,7 @@ pub mod unix_signals {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sa.sa_sigaction = libaflrs_executor_inmem_handle_timeout::<EM, C, OT, FT, I, R> as usize;
|
sa.sa_sigaction = libaflrs_executor_inmem_handle_timeout::<C, EM, FT, I, OT, R> as usize;
|
||||||
if sigaction(SIGUSR2, &mut sa as *mut sigaction, ptr::null_mut()) < 0 {
|
if sigaction(SIGUSR2, &mut sa as *mut sigaction, ptr::null_mut()) < 0 {
|
||||||
panic!("Could not set up sigusr2 handler for timeouts");
|
panic!("Could not set up sigusr2 handler for timeouts");
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ use utils::{current_milliseconds, Rand};
|
|||||||
/// The main fuzzer trait.
|
/// The main fuzzer trait.
|
||||||
pub trait Fuzzer<C, E, EM, FT, ST, I, OT, R>
|
pub trait Fuzzer<C, E, EM, FT, ST, I, OT, R>
|
||||||
where
|
where
|
||||||
ST: StagesTuple<EM, E, OT, FT, C, I, R>,
|
ST: StagesTuple<C, E, EM, FT, I, OT, R>,
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
@ -96,7 +96,7 @@ where
|
|||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
pub struct StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
||||||
where
|
where
|
||||||
ST: StagesTuple<EM, E, OT, FT, C, I, R>,
|
ST: StagesTuple<C, E, EM, FT, I, OT, R>,
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
@ -112,7 +112,7 @@ where
|
|||||||
impl<C, E, EM, FT, ST, I, OT, R> Fuzzer<C, E, EM, FT, ST, I, OT, R>
|
impl<C, E, EM, FT, ST, I, OT, R> Fuzzer<C, E, EM, FT, ST, I, OT, R>
|
||||||
for StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
for StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
||||||
where
|
where
|
||||||
ST: StagesTuple<EM, E, OT, FT, C, I, R>,
|
ST: StagesTuple<C, E, EM, FT, I, OT, R>,
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
@ -132,7 +132,7 @@ where
|
|||||||
|
|
||||||
impl<C, E, EM, FT, ST, I, OT, R> StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
impl<C, E, EM, FT, ST, I, OT, R> StdFuzzer<C, E, EM, FT, ST, I, OT, R>
|
||||||
where
|
where
|
||||||
ST: StagesTuple<EM, E, OT, FT, C, I, R>,
|
ST: StagesTuple<C, E, EM, FT, I, OT, R>,
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
|
@ -37,7 +37,7 @@ where
|
|||||||
) -> Result<(), AflError>;
|
) -> Result<(), AflError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait StagesTuple<EM, E, OT, FT, C, I, R>
|
pub trait StagesTuple<C, E, EM, FT, I, OT, R>
|
||||||
where
|
where
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
@ -59,7 +59,7 @@ where
|
|||||||
fn for_each_mut(&mut self, f: fn(&mut dyn Stage<C, E, EM, FT, I, OT, R>));
|
fn for_each_mut(&mut self, f: fn(&mut dyn Stage<C, E, EM, FT, I, OT, R>));
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<EM, E, OT, FT, C, I, R> StagesTuple<EM, E, OT, FT, C, I, R> for ()
|
impl<C, E, EM, FT, I, OT, R> StagesTuple<C, E, EM, FT, I, OT, R> for ()
|
||||||
where
|
where
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
@ -83,10 +83,10 @@ where
|
|||||||
fn for_each_mut(&mut self, _f: fn(&mut dyn Stage<C, E, EM, FT, I, OT, R>)) {}
|
fn for_each_mut(&mut self, _f: fn(&mut dyn Stage<C, E, EM, FT, I, OT, R>)) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Head, Tail, EM, E, OT, FT, C, I, R> StagesTuple<EM, E, OT, FT, C, I, R> for (Head, Tail)
|
impl<Head, Tail, EM, E, OT, FT, C, I, R> StagesTuple<C, E, EM, FT, I, OT, R> for (Head, Tail)
|
||||||
where
|
where
|
||||||
Head: Stage<C, E, EM, FT, I, OT, R>,
|
Head: Stage<C, E, EM, FT, I, OT, R>,
|
||||||
Tail: StagesTuple<EM, E, OT, FT, C, I, R> + TupleList,
|
Tail: StagesTuple<C, E, EM, FT, I, OT, R> + TupleList,
|
||||||
EM: EventManager<I>,
|
EM: EventManager<I>,
|
||||||
E: Executor<I> + HasObservers<OT>,
|
E: Executor<I> + HasObservers<OT>,
|
||||||
OT: ObserversTuple,
|
OT: ObserversTuple,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user