Struct libafl::corpus::inmemory_ondisk::InMemoryOnDiskCorpus
source · pub struct InMemoryOnDiskCorpus<I>where
I: Input,{ /* private fields */ }
Expand description
A corpus able to store Testcase
s to disk, while also keeping all of them in memory.
Metadata is written to a .<filename>.metadata
file in the same folder by default.
Implementations§
source§impl<I> InMemoryOnDiskCorpus<I>where
I: Input,
impl<I> InMemoryOnDiskCorpus<I>where
I: Input,
sourcepub fn new<P>(dir_path: P) -> Result<Self, Error>
pub fn new<P>(dir_path: P) -> Result<Self, Error>
Creates an InMemoryOnDiskCorpus
.
This corpus stores all testcases to disk, and keeps all of them in memory, as well.
By default, it stores metadata for each Testcase
as prettified json.
Metadata will be written to a file named .<testcase>.metadata
The metadata may include objective reason, specific information for a fuzz job, and more.
If you don’t want metadata, use InMemoryOnDiskCorpus::no_meta
.
To pick a different metadata format, use InMemoryOnDiskCorpus::with_meta_format
.
Will error, if std::fs::create_dir_all()
failed for dir_path
.
sourcepub fn with_meta_format<P>(
dir_path: P,
meta_format: Option<OnDiskMetadataFormat>
) -> Result<Self, Error>
pub fn with_meta_format<P>( dir_path: P, meta_format: Option<OnDiskMetadataFormat> ) -> Result<Self, Error>
Creates the InMemoryOnDiskCorpus
specifying the format in which Metadata
will be saved to disk.
Will error, if std::fs::create_dir_all()
failed for dir_path
.
sourcepub fn with_meta_format_and_prefix<P>(
dir_path: P,
meta_format: Option<OnDiskMetadataFormat>,
prefix: Option<String>,
locking: bool
) -> Result<Self, Error>
pub fn with_meta_format_and_prefix<P>( dir_path: P, meta_format: Option<OnDiskMetadataFormat>, prefix: Option<String>, locking: bool ) -> Result<Self, Error>
Creates the InMemoryOnDiskCorpus
specifying the format in which Metadata
will be saved to disk
and the prefix for the filenames.
Will error, if std::fs::create_dir_all()
failed for dir_path
.
sourcepub fn no_meta<P>(dir_path: P) -> Result<Self, Error>
pub fn no_meta<P>(dir_path: P) -> Result<Self, Error>
Creates an InMemoryOnDiskCorpus
that will not store .metadata files
Will error, if std::fs::create_dir_all()
failed for dir_path
.
Trait Implementations§
source§impl<I> Clone for InMemoryOnDiskCorpus<I>
impl<I> Clone for InMemoryOnDiskCorpus<I>
source§fn clone(&self) -> InMemoryOnDiskCorpus<I>
fn clone(&self) -> InMemoryOnDiskCorpus<I>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<I> Corpus for InMemoryOnDiskCorpus<I>where
I: Input,
impl<I> Corpus for InMemoryOnDiskCorpus<I>where
I: Input,
source§fn count_disabled(&self) -> usize
fn count_disabled(&self) -> usize
Returns the number of all disabled entries
source§fn add(&mut self, testcase: Testcase<I>) -> Result<CorpusId, Error>
fn add(&mut self, testcase: Testcase<I>) -> Result<CorpusId, Error>
Add an enabled testcase to the corpus and return its index
source§fn add_disabled(&mut self, testcase: Testcase<I>) -> Result<CorpusId, Error>
fn add_disabled(&mut self, testcase: Testcase<I>) -> Result<CorpusId, Error>
Add a disabled testcase to the corpus and return its index
source§fn replace(
&mut self,
idx: CorpusId,
testcase: Testcase<I>
) -> Result<Testcase<I>, Error>
fn replace( &mut self, idx: CorpusId, testcase: Testcase<I> ) -> Result<Testcase<I>, Error>
Replaces the testcase at the given idx
source§fn remove(&mut self, idx: CorpusId) -> Result<Testcase<I>, Error>
fn remove(&mut self, idx: CorpusId) -> Result<Testcase<I>, Error>
Removes an entry from the corpus, returning it if it was present.
source§fn get(&self, idx: CorpusId) -> Result<&RefCell<Testcase<I>>, Error>
fn get(&self, idx: CorpusId) -> Result<&RefCell<Testcase<I>>, Error>
Get by id; considers only enabled testcases
source§fn get_from_all(&self, idx: CorpusId) -> Result<&RefCell<Testcase<I>>, Error>
fn get_from_all(&self, idx: CorpusId) -> Result<&RefCell<Testcase<I>>, Error>
Get by id; considers both enabled and disabled testcases
source§fn current_mut(&mut self) -> &mut Option<CorpusId>
fn current_mut(&mut self) -> &mut Option<CorpusId>
Current testcase scheduled (mutable)
source§fn nth_from_all(&self, nth: usize) -> CorpusId
fn nth_from_all(&self, nth: usize) -> CorpusId
Get the nth corpus id; considers both enabled and disabled testcases
source§fn load_input_into(
&self,
testcase: &mut Testcase<Self::Input>
) -> Result<(), Error>
fn load_input_into( &self, testcase: &mut Testcase<Self::Input> ) -> Result<(), Error>
Testcase
from persistent storage,
if necessary, and if was not already loaded (== Some(input)
).
After this call, testcase.input()
must always return Some(input)
.source§fn store_input_from(
&self,
testcase: &Testcase<Self::Input>
) -> Result<(), Error>
fn store_input_from( &self, testcase: &Testcase<Self::Input> ) -> Result<(), Error>
Testcase
to persistent storage, if necessary.source§fn ids(&self) -> CorpusIdIterator<'_, Self> ⓘ
fn ids(&self) -> CorpusIdIterator<'_, Self> ⓘ
source§impl<I> Debug for InMemoryOnDiskCorpus<I>
impl<I> Debug for InMemoryOnDiskCorpus<I>
source§impl<I> Default for InMemoryOnDiskCorpus<I>
impl<I> Default for InMemoryOnDiskCorpus<I>
source§fn default() -> InMemoryOnDiskCorpus<I>
fn default() -> InMemoryOnDiskCorpus<I>
source§impl<'de, I> Deserialize<'de> for InMemoryOnDiskCorpus<I>where
I: Input + DeserializeOwned,
impl<'de, I> Deserialize<'de> for InMemoryOnDiskCorpus<I>where
I: Input + DeserializeOwned,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<I> HasTestcase for InMemoryOnDiskCorpus<I>where
I: Input,
impl<I> HasTestcase for InMemoryOnDiskCorpus<I>where
I: Input,
source§impl<I> Serialize for InMemoryOnDiskCorpus<I>where
I: Input + DeserializeOwned,
impl<I> Serialize for InMemoryOnDiskCorpus<I>where
I: Input + DeserializeOwned,
Auto Trait Implementations§
impl<I> Freeze for InMemoryOnDiskCorpus<I>
impl<I> !RefUnwindSafe for InMemoryOnDiskCorpus<I>
impl<I> !Send for InMemoryOnDiskCorpus<I>
impl<I> !Sync for InMemoryOnDiskCorpus<I>
impl<I> Unpin for InMemoryOnDiskCorpus<I>
impl<I> !UnwindSafe for InMemoryOnDiskCorpus<I>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<Tail, T> Prepend<T> for Tail
impl<Tail, T> Prepend<T> for Tail
§type PreprendResult = Tail
type PreprendResult = Tail
TupleList
, of an Prepend::prepend()
call,
including the prepended entry.source§fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer ) -> Result<(), ErrorImpl>
source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.