Update LibAFL custom mutator to latest

This commit is contained in:
Dominik Maier 2023-01-05 11:47:25 +00:00
parent 885a6fc106
commit aa39921e49
2 changed files with 23 additions and 8 deletions

View File

@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
libafl = { git = "https://github.com/AFLplusplus/LibAFL.git", rev = "62614ce1016c86e3f00f35b56399292ceabd486b" } libafl = { git = "https://github.com/AFLplusplus/LibAFL.git", rev = "266677bb88abe75165430f34e7de897c35560504" }
custom_mutator = { path = "../rust/custom_mutator", features = ["afl_internals"] } custom_mutator = { path = "../rust/custom_mutator", features = ["afl_internals"] }
serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib

View File

@ -18,10 +18,12 @@ use libafl::{
scheduled::{havoc_mutations, tokens_mutations, StdScheduledMutator, Tokens}, scheduled::{havoc_mutations, tokens_mutations, StdScheduledMutator, Tokens},
Mutator, Mutator,
}, },
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand, State}, prelude::UsesInput,
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand, State, UsesState},
Error, Error,
}; };
#[allow(clippy::identity_op)]
const MAX_FILE: usize = 1 * 1024 * 1024; const MAX_FILE: usize = 1 * 1024 * 1024;
static mut AFL: Option<&'static afl_state> = None; static mut AFL: Option<&'static afl_state> = None;
@ -64,7 +66,11 @@ impl<'de> Deserialize<'de> for AFLCorpus {
} }
} }
impl Corpus<BytesInput> for AFLCorpus { impl UsesState for AFLCorpus {
type State = AFLState;
}
impl Corpus for AFLCorpus {
#[inline] #[inline]
fn count(&self) -> usize { fn count(&self) -> usize {
afl().queued_items as usize afl().queued_items as usize
@ -76,7 +82,11 @@ impl Corpus<BytesInput> for AFLCorpus {
} }
#[inline] #[inline]
fn replace(&mut self, idx: usize, testcase: Testcase<BytesInput>) -> Result<(), Error> { fn replace(
&mut self,
idx: usize,
testcase: Testcase<BytesInput>,
) -> Result<Testcase<Self::Input>, Error> {
unimplemented!(); unimplemented!();
} }
@ -92,7 +102,7 @@ impl Corpus<BytesInput> for AFLCorpus {
entries.entry(idx).or_insert_with(|| { entries.entry(idx).or_insert_with(|| {
let queue_buf = std::slice::from_raw_parts_mut(afl().queue_buf, self.count()); let queue_buf = std::slice::from_raw_parts_mut(afl().queue_buf, self.count());
let entry = queue_buf[idx].as_mut().unwrap(); let entry = queue_buf[idx].as_mut().unwrap();
let fname = CStr::from_ptr((entry.fname as *mut i8).as_ref().unwrap()) let fname = CStr::from_ptr((entry.fname.cast::<i8>()).as_ref().unwrap())
.to_str() .to_str()
.unwrap() .unwrap()
.to_owned(); .to_owned();
@ -127,9 +137,10 @@ pub struct AFLState {
} }
impl AFLState { impl AFLState {
#[must_use]
pub fn new(seed: u32) -> Self { pub fn new(seed: u32) -> Self {
Self { Self {
rand: StdRand::with_seed(seed as u64), rand: StdRand::with_seed(u64::from(seed)),
corpus: AFLCorpus::default(), corpus: AFLCorpus::default(),
metadata: SerdeAnyMap::new(), metadata: SerdeAnyMap::new(),
max_size: MAX_FILE, max_size: MAX_FILE,
@ -153,7 +164,11 @@ impl HasRand for AFLState {
} }
} }
impl HasCorpus<BytesInput> for AFLState { impl UsesInput for AFLState {
type Input = BytesInput;
}
impl HasCorpus for AFLState {
type Corpus = AFLCorpus; type Corpus = AFLCorpus;
#[inline] #[inline]
@ -208,7 +223,7 @@ impl CustomMutator for LibAFLBaseCustomMutator {
tokens.push(data.to_vec()); tokens.push(data.to_vec());
} }
if !tokens.is_empty() { if !tokens.is_empty() {
state.add_metadata(Tokens::new(tokens)); state.add_metadata(Tokens::from(tokens));
} }
Ok(Self { Ok(Self {
state, state,