Move HasMetadata/HasNamedMetadata trait to libafl_bolts (#2016)

* move around

* fmt

* rev

* fmt

* doc job

* name

* move to libafl

* separate even more

* miri
This commit is contained in:
Dongjia "toka" Zhang 2024-04-08 19:24:56 +02:00 committed by GitHub
parent ff938261df
commit e8fe5bb614
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
101 changed files with 402 additions and 376 deletions

View File

@ -83,6 +83,64 @@ jobs:
run: pwd && ls & cd libafl_cc && cargo build --release run: pwd && ls & cd libafl_cc && cargo build --release
ubuntu-doc:
runs-on: ubuntu-22.04
steps:
- name: Remove Dotnet & Haskell
run: rm -rf /usr/share/dotnet && rm -rf /opt/ghc
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
- name: Remove existing clang and LLVM
run: sudo apt purge llvm* clang* lld* lldb* opt*
- name: Install and cache deps
run: sudo apt update && sudo apt install ninja-build shellcheck libgtk-3-dev gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libslirp-dev libz3-dev
- name: Add nightly rustfmt and clippy
run: rustup toolchain install nightly --component rustfmt --component clippy --component miri --allow-downgrade
- name: Install ucd-generate
run: cargo install -f ucd-generate
- uses: actions/checkout@v3
- uses: Swatinem/rust-cache@v2
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v1
with:
directory: ${{ runner.temp }}/llvm
version: 17
# ---- doc check ----
- name: Build Docs
run: RUSTFLAGS="--cfg docsrs" cargo +nightly doc --all-features
- name: Test Docs
run: RUSTFLAGS="--cfg docsrs" cargo +nightly test --doc --all-features
ubuntu-miri:
runs-on: ubuntu-22.04
steps:
- name: Remove Dotnet & Haskell
run: rm -rf /usr/share/dotnet && rm -rf /opt/ghc
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
- name: Remove existing clang and LLVM
run: sudo apt purge llvm* clang* lld* lldb* opt*
- name: Install and cache deps
run: sudo apt update && sudo apt install ninja-build shellcheck libgtk-3-dev gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libslirp-dev libz3-dev
- name: Add nightly rustfmt and clippy
run: rustup toolchain install nightly --component rustfmt --component clippy --component miri --allow-downgrade
- name: Install ucd-generate
run: cargo install -f ucd-generate
- uses: actions/checkout@v3
- uses: Swatinem/rust-cache@v2
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v1
with:
directory: ${{ runner.temp }}/llvm
version: 17
# --- miri undefined behavior test --
- name: Run miri tests
run: RUST_BACKTRACE=1 MIRIFLAGS="-Zmiri-disable-isolation" cargo +nightly miri test
ubuntu: ubuntu:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
@ -119,22 +177,12 @@ jobs:
run: clang-format -n -Werror --style=file $(find . -type f \( -name '*.cpp' -o -iname '*.hpp' -o -name '*.cc' -o -name '*.cxx' -o -name '*.cc' -o -name '*.h' \) | grep -v '/target/' | grep -v 'libpng-1\.6\.37' | grep -v 'stb_image\.h' | grep -v 'dlmalloc\.c' | grep -v 'QEMU-Nyx') run: clang-format -n -Werror --style=file $(find . -type f \( -name '*.cpp' -o -iname '*.hpp' -o -name '*.cc' -o -name '*.cxx' -o -name '*.cc' -o -name '*.h' \) | grep -v '/target/' | grep -v 'libpng-1\.6\.37' | grep -v 'stb_image\.h' | grep -v 'dlmalloc\.c' | grep -v 'QEMU-Nyx')
- name: run shellcheck - name: run shellcheck
run: shellcheck ./scripts/*.sh run: shellcheck ./scripts/*.sh
# ---- doc check ----
- name: Build Docs
run: RUSTFLAGS="--cfg docsrs" cargo +nightly doc --all-features
- name: Test Docs
run: RUSTFLAGS="--cfg docsrs" cargo +nightly test --doc --all-features
# ---- build normal and examples ---- # ---- build normal and examples ----
- name: Run a normal build - name: Run a normal build
run: cargo build --verbose run: cargo build --verbose
- name: Build examples - name: Build examples
run: cargo build --examples --verbose run: cargo build --examples --verbose
# --- miri undefined behavior test --
- name: Run miri tests
run: RUST_BACKTRACE=1 MIRIFLAGS="-Zmiri-disable-isolation" cargo +nightly miri test
ubuntu-clippy: ubuntu-clippy:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:

View File

@ -18,7 +18,8 @@ use libafl::{
observers::StdMapObserver, observers::StdMapObserver,
schedulers::QueueScheduler, schedulers::QueueScheduler,
stages::{mutational::StdMutationalStage, GeneralizationStage}, stages::{mutational::StdMutationalStage, GeneralizationStage},
state::{HasMetadata, StdState}, state::StdState,
HasMetadata,
}; };
use libafl_bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice}; use libafl_bolts::{current_nanos, rands::StdRand, tuples::tuple_list, AsSlice};

View File

@ -18,7 +18,8 @@ use libafl::{
observers::StdMapObserver, observers::StdMapObserver,
schedulers::QueueScheduler, schedulers::QueueScheduler,
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasMetadata, StdState}, state::StdState,
HasMetadata,
}; };
use libafl_bolts::{current_nanos, rands::StdRand, tuples::tuple_list}; use libafl_bolts::{current_nanos, rands::StdRand, tuples::tuple_list};

View File

@ -15,7 +15,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -15,7 +15,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -23,8 +23,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{ShadowTracingStage, StdMutationalStage}, stages::{ShadowTracingStage, StdMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
#[cfg(unix)] #[cfg(unix)]
use libafl::{feedback_and_fast, feedbacks::ConstFeedback}; use libafl::{feedback_and_fast, feedbacks::ConstFeedback};

View File

@ -29,8 +29,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{ShadowTracingStage, StdMutationalStage}, stages::{ShadowTracingStage, StdMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
#[cfg(unix)] #[cfg(unix)]
use libafl::{feedback_and_fast, feedbacks::ConstFeedback}; use libafl::{feedback_and_fast, feedbacks::ConstFeedback};

View File

@ -23,8 +23,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{ShadowTracingStage, StdMutationalStage}, stages::{ShadowTracingStage, StdMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
#[cfg(unix)] #[cfg(unix)]
use libafl::{feedback_and_fast, feedbacks::ConstFeedback}; use libafl::{feedback_and_fast, feedbacks::ConstFeedback};

View File

@ -36,8 +36,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage,
TracingStage, TracingStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -39,8 +39,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage,
TracingStage, TracingStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -34,8 +34,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage,
StdMutationalStage, StdMutationalStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -29,8 +29,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, StdMutationalStage,
TracingStage, TracingStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -29,8 +29,8 @@ use libafl::{
calibrate::CalibrationStage, mutational::MultiMutationalStage, calibrate::CalibrationStage, mutational::MultiMutationalStage,
power::StdPowerMutationalStage, ColorizationStage, IfStage, power::StdPowerMutationalStage, ColorizationStage, IfStage,
}, },
state::{HasCorpus, HasCurrentTestcase, HasMetadata, StdState}, state::{HasCorpus, HasCurrentTestcase, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -33,8 +33,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage,
StdMutationalStage, StdMutationalStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -42,8 +42,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, GeneralizationStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, GeneralizationStage,
StdMutationalStage, TracingStage, StdMutationalStage, TracingStage,
}, },
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_time, current_nanos, current_time,

View File

@ -28,8 +28,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{StdMutationalStage, TracingStage}, stages::{StdMutationalStage, TracingStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -22,8 +22,8 @@ use libafl::{
observers::StdMapObserver, observers::StdMapObserver,
schedulers::RandScheduler, schedulers::RandScheduler,
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -27,8 +27,8 @@ use libafl::{
powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler, powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler,
}, },
stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage}, stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -26,8 +26,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{CoverageAccountingScheduler, QueueScheduler}, schedulers::{CoverageAccountingScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -27,8 +27,8 @@ use libafl::{
powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler, powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler,
}, },
stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage, stats::AflStatsStage}, stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage, stats::AflStatsStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -26,8 +26,8 @@ use libafl::{
observers::{HitcountsMapObserver, TimeObserver}, observers::{HitcountsMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::{CoreId, Cores}, core_affinity::{CoreId, Cores},

View File

@ -30,8 +30,8 @@ use libafl::{
powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler, powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler,
}, },
stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage}, stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -26,8 +26,8 @@ use libafl::{
observers::{HitcountsMapObserver, TimeObserver}, observers::{HitcountsMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -29,8 +29,8 @@ use libafl::{
observers::{HitcountsMapObserver, TimeObserver}, observers::{HitcountsMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::mutational::StdMutationalStage, stages::mutational::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -27,8 +27,8 @@ use libafl::{
powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler, powersched::PowerSchedule, IndexesLenTimeMinimizerScheduler, StdWeightedScheduler,
}, },
stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage}, stages::{calibrate::CalibrationStage, power::StdPowerMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
current_nanos, current_nanos,

View File

@ -23,8 +23,8 @@ use libafl::{
none_input_converter, none_input_converter,
schedulers::QueueScheduler, schedulers::QueueScheduler,
stages::{mutational::StdMutationalStage, sync::SyncFromBrokerStage}, stages::{mutational::StdMutationalStage, sync::SyncFromBrokerStage},
state::{HasMetadata, StdState}, state::StdState,
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -26,8 +26,8 @@ use libafl::{
calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage, calibrate::CalibrationStage, power::StdPowerMutationalStage, ShadowTracingStage,
StagesTuple, StdMutationalStage, StagesTuple, StdMutationalStage,
}, },
state::{HasCorpus, HasMetadata, StdState, UsesState}, state::{HasCorpus, StdState, UsesState},
Error, Error, HasMetadata,
}; };
#[cfg(not(feature = "simplemgr"))] #[cfg(not(feature = "simplemgr"))]
use libafl_bolts::shmem::StdShMemProvider; use libafl_bolts::shmem::StdShMemProvider;

View File

@ -5,8 +5,8 @@ use libafl::{
feedbacks::{Feedback, MapIndexesMetadata}, feedbacks::{Feedback, MapIndexesMetadata},
observers::ObserversTuple, observers::ObserversTuple,
schedulers::{MinimizerScheduler, TestcaseScore}, schedulers::{MinimizerScheduler, TestcaseScore},
state::{HasCorpus, HasMetadata, State}, state::{HasCorpus, State},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{Named, SerdeAny}; use libafl_bolts::{Named, SerdeAny};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

149
libafl/src/common/mod.rs Normal file
View File

@ -0,0 +1,149 @@
//! This module defines trait shared across different `LibAFL` modules
use alloc::boxed::Box;
use core::any::type_name;
use libafl_bolts::{
serdeany::{NamedSerdeAnyMap, SerdeAny, SerdeAnyMap},
Error,
};
/// Trait for elements offering metadata
pub trait HasMetadata {
/// A map, storing all metadata
fn metadata_map(&self) -> &SerdeAnyMap;
/// A map, storing all metadata (mutable)
fn metadata_map_mut(&mut self) -> &mut SerdeAnyMap;
/// Add a metadata to the metadata map
#[inline]
fn add_metadata<M>(&mut self, meta: M)
where
M: SerdeAny,
{
self.metadata_map_mut().insert(meta);
}
/// Gets metadata, or inserts it using the given construction function `default`
fn metadata_or_insert_with<M>(&mut self, default: impl FnOnce() -> M) -> &mut M
where
M: SerdeAny,
{
self.metadata_map_mut().get_or_insert_with::<M>(default)
}
/// Remove a metadata from the metadata map
#[inline]
fn remove_metadata<M>(&mut self) -> Option<Box<M>>
where
M: SerdeAny,
{
self.metadata_map_mut().remove::<M>()
}
/// Check for a metadata
///
/// # Note
/// For performance reasons, you likely want to use [`Self::metadata_or_insert_with`] instead
#[inline]
fn has_metadata<M>(&self) -> bool
where
M: SerdeAny,
{
self.metadata_map().get::<M>().is_some()
}
/// To get metadata
#[inline]
fn metadata<M>(&self) -> Result<&M, Error>
where
M: SerdeAny,
{
self.metadata_map()
.get::<M>()
.ok_or_else(|| Error::key_not_found(format!("{} not found", type_name::<M>())))
}
/// To get mutable metadata
#[inline]
fn metadata_mut<M>(&mut self) -> Result<&mut M, Error>
where
M: SerdeAny,
{
self.metadata_map_mut()
.get_mut::<M>()
.ok_or_else(|| Error::key_not_found(format!("{} not found", type_name::<M>())))
}
}
/// Trait for elements offering named metadata
pub trait HasNamedMetadata {
/// A map, storing all metadata
fn named_metadata_map(&self) -> &NamedSerdeAnyMap;
/// A map, storing all metadata (mutable)
fn named_metadata_map_mut(&mut self) -> &mut NamedSerdeAnyMap;
/// Add a metadata to the metadata map
#[inline]
fn add_named_metadata<M>(&mut self, name: &str, meta: M)
where
M: SerdeAny,
{
self.named_metadata_map_mut().insert(name, meta);
}
/// Add a metadata to the metadata map
#[inline]
fn remove_named_metadata<M>(&mut self, name: &str) -> Option<Box<M>>
where
M: SerdeAny,
{
self.named_metadata_map_mut().remove::<M>(name)
}
/// Gets metadata, or inserts it using the given construction function `default`
fn named_metadata_or_insert_with<M>(
&mut self,
name: &str,
default: impl FnOnce() -> M,
) -> &mut M
where
M: SerdeAny,
{
self.named_metadata_map_mut()
.get_or_insert_with::<M>(name, default)
}
/// Check for a metadata
///
/// # Note
/// You likely want to use [`Self::named_metadata_or_insert_with`] for performance reasons.
#[inline]
fn has_named_metadata<M>(&self, name: &str) -> bool
where
M: SerdeAny,
{
self.named_metadata_map().contains::<M>(name)
}
/// To get named metadata
#[inline]
fn named_metadata<M>(&self, name: &str) -> Result<&M, Error>
where
M: SerdeAny,
{
self.named_metadata_map()
.get::<M>(name)
.ok_or_else(|| Error::key_not_found(format!("{} not found", type_name::<M>())))
}
/// To get mutable named metadata
#[inline]
fn named_metadata_mut<M>(&mut self, name: &str) -> Result<&mut M, Error>
where
M: SerdeAny,
{
self.named_metadata_map_mut()
.get_mut::<M>(name)
.ok_or_else(|| Error::key_not_found(format!("{} not found", type_name::<M>())))
}
}

View File

@ -24,8 +24,7 @@ use super::{
use crate::{ use crate::{
corpus::{Corpus, CorpusId, InMemoryCorpus, Testcase}, corpus::{Corpus, CorpusId, InMemoryCorpus, Testcase},
inputs::{Input, UsesInput}, inputs::{Input, UsesInput},
state::HasMetadata, Error, HasMetadata,
Error,
}; };
/// The [`Testcase`] metadata that'll be stored to disk /// The [`Testcase`] metadata that'll be stored to disk

View File

@ -19,8 +19,8 @@ use crate::{
monitors::{AggregatorOps, UserStats, UserStatsValue}, monitors::{AggregatorOps, UserStats, UserStatsValue},
observers::{MapObserver, ObserversTuple}, observers::{MapObserver, ObserversTuple},
schedulers::{LenTimeMulTestcaseScore, RemovableScheduler, Scheduler, TestcaseScore}, schedulers::{LenTimeMulTestcaseScore, RemovableScheduler, Scheduler, TestcaseScore},
state::{HasCorpus, HasExecutions, HasMetadata, UsesState}, state::{HasCorpus, HasExecutions, UsesState},
Error, HasScheduler, Error, HasMetadata, HasScheduler,
}; };
/// `CorpusMinimizers` minimize corpora according to internal logic. See various implementations for /// `CorpusMinimizers` minimize corpora according to internal logic. See various implementations for

View File

@ -16,8 +16,7 @@ use super::Corpus;
use crate::{ use crate::{
corpus::CorpusId, corpus::CorpusId,
inputs::{Input, UsesInput}, inputs::{Input, UsesInput},
state::HasMetadata, Error, HasMetadata,
Error,
}; };
/// Shorthand to receive a [`Ref`] or [`RefMut`] to a stored [`Testcase`], by [`CorpusId`]. /// Shorthand to receive a [`Ref`] or [`RefMut`] to a stored [`Testcase`], by [`CorpusId`].

View File

@ -38,8 +38,8 @@ use crate::{
fuzzer::{EvaluatorObservers, ExecutionProcessor}, fuzzer::{EvaluatorObservers, ExecutionProcessor},
inputs::{Input, UsesInput}, inputs::{Input, UsesInput},
observers::ObserversTuple, observers::ObserversTuple,
state::{HasExecutions, HasLastReportTime, HasMetadata, UsesState}, state::{HasExecutions, HasLastReportTime, UsesState},
Error, Error, HasMetadata,
}; };
const _LLMP_TAG_TO_MAIN: Tag = Tag(0x3453453); const _LLMP_TAG_TO_MAIN: Tag = Tag(0x3453453);

View File

@ -57,8 +57,8 @@ use crate::{
inputs::{Input, InputConverter, UsesInput}, inputs::{Input, InputConverter, UsesInput},
monitors::Monitor, monitors::Monitor,
observers::ObserversTuple, observers::ObserversTuple,
state::{HasExecutions, HasLastReportTime, HasMetadata, State, UsesState}, state::{HasExecutions, HasLastReportTime, State, UsesState},
Error, Error, HasMetadata,
}; };
/// Forward this to the client /// Forward this to the client

View File

@ -46,8 +46,8 @@ use crate::{
inputs::Input, inputs::Input,
monitors::UserStats, monitors::UserStats,
observers::ObserversTuple, observers::ObserversTuple,
state::{HasExecutions, HasLastReportTime, HasMetadata, State}, state::{HasExecutions, HasLastReportTime, State},
Error, Error, HasMetadata,
}; };
#[cfg(feature = "scalability_introspection")] #[cfg(feature = "scalability_introspection")]
use crate::{ use crate::{

View File

@ -32,8 +32,8 @@ use crate::{
}, },
inputs::UsesInput, inputs::UsesInput,
monitors::Monitor, monitors::Monitor,
state::{HasExecutions, HasLastReportTime, HasMetadata, State, UsesState}, state::{HasExecutions, HasLastReportTime, State, UsesState},
Error, Error, HasMetadata,
}; };
#[cfg(feature = "std")] #[cfg(feature = "std")]
use crate::{ use crate::{

View File

@ -48,8 +48,8 @@ use crate::{
fuzzer::{EvaluatorObservers, ExecutionProcessor}, fuzzer::{EvaluatorObservers, ExecutionProcessor},
inputs::{Input, UsesInput}, inputs::{Input, UsesInput},
monitors::Monitor, monitors::Monitor,
state::{HasExecutions, HasLastReportTime, HasMetadata, State, UsesState}, state::{HasExecutions, HasLastReportTime, State, UsesState},
Error, Error, HasMetadata,
}; };
/// Tries to create (synchronously) a [`TcpListener`] that is `nonblocking` (for later use in tokio). /// Tries to create (synchronously) a [`TcpListener`] that is `nonblocking` (for later use in tokio).

View File

@ -32,8 +32,8 @@ use crate::{
fuzzer::HasObjective, fuzzer::HasObjective,
inputs::UsesInput, inputs::UsesInput,
observers::{ObserversTuple, UsesObservers}, observers::{ObserversTuple, UsesObservers},
state::{HasCorpus, HasExecutions, HasMetadata, HasSolutions, State, UsesState}, state::{HasCorpus, HasExecutions, HasSolutions, State, UsesState},
Error, Error, HasMetadata,
}; };
/// The inner structure of `InProcessExecutor`. /// The inner structure of `InProcessExecutor`.

View File

@ -15,8 +15,8 @@ use crate::{
feedbacks::Feedback, feedbacks::Feedback,
inputs::UsesInput, inputs::UsesInput,
observers::{concolic::ConcolicObserver, ObserversTuple}, observers::{concolic::ConcolicObserver, ObserversTuple},
state::{HasMetadata, State}, state::State,
Error, Error, HasMetadata,
}; };
/// The concolic feedback. It is used to attach concolic tracing metadata to the testcase. /// The concolic feedback. It is used to attach concolic tracing metadata to the testcase.

View File

@ -16,8 +16,8 @@ use crate::{
feedbacks::Feedback, feedbacks::Feedback,
inputs::Input, inputs::Input,
observers::{Observer, ObserversTuple}, observers::{Observer, ObserversTuple},
state::{HasMetadata, State}, state::State,
Error, Error, HasMetadata,
}; };
/// The result of a differential test between two observers. /// The result of a differential test between two observers.

View File

@ -10,7 +10,8 @@ use crate::{
executors::ExitKind, executors::ExitKind,
feedbacks::Feedback, feedbacks::Feedback,
observers::{ListObserver, ObserversTuple}, observers::{ListObserver, ObserversTuple},
state::{HasNamedMetadata, State}, state::State,
HasNamedMetadata,
}; };
/// The metadata to remember past observed value /// The metadata to remember past observed value

View File

@ -24,8 +24,8 @@ use crate::{
inputs::UsesInput, inputs::UsesInput,
monitors::{AggregatorOps, UserStats, UserStatsValue}, monitors::{AggregatorOps, UserStats, UserStatsValue},
observers::{MapObserver, Observer, ObserversTuple, UsesObserver}, observers::{MapObserver, Observer, ObserversTuple, UsesObserver},
state::{HasMetadata, HasNamedMetadata, State}, state::State,
Error, Error, HasMetadata, HasNamedMetadata,
}; };
/// A [`MapFeedback`] that implements the AFL algorithm using an [`OrReducer`] combining the bits for the history map and the bit from ``HitcountsMapObserver``. /// A [`MapFeedback`] that implements the AFL algorithm using an [`OrReducer`] combining the bits for the history map and the bit from ``HitcountsMapObserver``.

View File

@ -15,8 +15,8 @@ use crate::{
generators::NautilusContext, generators::NautilusContext,
inputs::NautilusInput, inputs::NautilusInput,
observers::ObserversTuple, observers::ObserversTuple,
state::{HasCorpus, HasMetadata, State}, state::{HasCorpus, State},
Error, Error, HasMetadata,
}; };
/// Metadata for Nautilus grammar mutator chunks /// Metadata for Nautilus grammar mutator chunks

View File

@ -13,8 +13,8 @@ use crate::{
feedbacks::{Feedback, HasObserverName}, feedbacks::{Feedback, HasObserverName},
inputs::UsesInput, inputs::UsesInput,
observers::{ObserverWithHashField, ObserversTuple}, observers::{ObserverWithHashField, ObserversTuple},
state::{HasNamedMetadata, State}, state::State,
Error, Error, HasNamedMetadata,
}; };
/// The prefix of the metadata names /// The prefix of the metadata names

View File

@ -5,11 +5,8 @@ use libafl_bolts::{impl_serdeany, Error, Named};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{ use crate::{
events::EventFirer, events::EventFirer, executors::ExitKind, feedbacks::Feedback, observers::ObserversTuple,
executors::ExitKind, state::State, HasMetadata,
feedbacks::Feedback,
observers::ObserversTuple,
state::{HasMetadata, State},
}; };
/// Constant name of the [`TransferringMetadata`]. /// Constant name of the [`TransferringMetadata`].

View File

@ -17,11 +17,8 @@ use crate::{
schedulers::Scheduler, schedulers::Scheduler,
stages::{HasCurrentStage, StagesTuple}, stages::{HasCurrentStage, StagesTuple},
start_timer, start_timer,
state::{ state::{HasCorpus, HasExecutions, HasImported, HasLastReportTime, HasSolutions, UsesState},
HasCorpus, HasExecutions, HasImported, HasLastReportTime, HasMetadata, HasSolutions, Error, HasMetadata,
UsesState,
},
Error,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};
@ -762,8 +759,8 @@ pub mod test {
corpus::CorpusId, corpus::CorpusId,
events::ProgressReporter, events::ProgressReporter,
stages::{HasCurrentStage, StagesTuple}, stages::{HasCurrentStage, StagesTuple},
state::{HasExecutions, HasLastReportTime, HasMetadata, State, UsesState}, state::{HasExecutions, HasLastReportTime, State, UsesState},
Fuzzer, Fuzzer, HasMetadata,
}; };
#[derive(Clone, Debug)] #[derive(Clone, Debug)]

View File

@ -9,8 +9,8 @@ use crate::{
corpus::Testcase, corpus::Testcase,
inputs::BytesInput, inputs::BytesInput,
stages::mutational::{MutatedTransform, MutatedTransformPost}, stages::mutational::{MutatedTransform, MutatedTransformPost},
state::{HasCorpus, HasMetadata}, state::HasCorpus,
Error, Error, HasMetadata,
}; };
/// An item of the generalized input /// An item of the generalized input

View File

@ -98,6 +98,8 @@ pub mod bolts {}
#[doc(hidden)] #[doc(hidden)]
pub use libafl_derive::*; pub use libafl_derive::*;
pub mod common;
pub use common::*;
pub mod corpus; pub mod corpus;
pub mod events; pub mod events;
pub mod executors; pub mod executors;

View File

@ -13,8 +13,8 @@ use crate::{
inputs::{GramatronInput, Terminal}, inputs::{GramatronInput, Terminal},
mutators::{MutationResult, Mutator}, mutators::{MutationResult, Mutator},
random_corpus_id, random_corpus_id,
state::{HasCorpus, HasMetadata, HasRand}, state::{HasCorpus, HasRand},
Error, Error, HasMetadata,
}; };
const RECUR_THRESHOLD: u64 = 5; const RECUR_THRESHOLD: u64 = 5;

View File

@ -11,8 +11,8 @@ use crate::{
inputs::{GeneralizedInputMetadata, GeneralizedItem}, inputs::{GeneralizedInputMetadata, GeneralizedItem},
mutators::{token_mutations::Tokens, MutationResult, Mutator}, mutators::{token_mutations::Tokens, MutationResult, Mutator},
random_corpus_id, random_corpus_id,
state::{HasCorpus, HasMetadata, HasRand}, state::{HasCorpus, HasRand},
Error, Error, HasMetadata,
}; };
const RECURSIVE_REPLACEMENT_DEPTH: [usize; 6] = [2, 4, 8, 16, 32, 64]; const RECURSIVE_REPLACEMENT_DEPTH: [usize; 6] = [2, 4, 8, 16, 32, 64];

View File

@ -18,8 +18,8 @@ use super::MutationId;
use crate::{ use crate::{
corpus::{Corpus, CorpusId}, corpus::{Corpus, CorpusId},
mutators::{ComposedByMutations, MutationResult, Mutator, MutatorsTuple, ScheduledMutator}, mutators::{ComposedByMutations, MutationResult, Mutator, MutatorsTuple, ScheduledMutator},
state::{HasCorpus, HasMetadata, HasRand, HasSolutions}, state::{HasCorpus, HasRand, HasSolutions},
Error, Error, HasMetadata,
}; };
/// A Struct for managing MOpt-mutator parameters. /// A Struct for managing MOpt-mutator parameters.

View File

@ -1306,11 +1306,8 @@ mod tests {
use super::*; use super::*;
use crate::{ use crate::{
corpus::InMemoryCorpus, corpus::InMemoryCorpus, feedbacks::ConstFeedback, inputs::BytesInput,
feedbacks::ConstFeedback, mutators::MutatorsTuple, state::StdState, HasMetadata,
inputs::BytesInput,
mutators::MutatorsTuple,
state::{HasMetadata, StdState},
}; };
type TestMutatorsTupleType = tuple_list_type!( type TestMutatorsTupleType = tuple_list_type!(

View File

@ -14,8 +14,8 @@ use crate::{
generators::nautilus::NautilusContext, generators::nautilus::NautilusContext,
inputs::nautilus::NautilusInput, inputs::nautilus::NautilusInput,
mutators::{MutationResult, Mutator}, mutators::{MutationResult, Mutator},
state::{HasCorpus, HasMetadata}, state::HasCorpus,
Error, Error, HasMetadata,
}; };
/// The randomic mutator for `Nautilus` grammar. /// The randomic mutator for `Nautilus` grammar.

View File

@ -28,8 +28,8 @@ use crate::{
token_mutations::{TokenInsert, TokenReplace}, token_mutations::{TokenInsert, TokenReplace},
MutationResult, Mutator, MutatorsTuple, MutationResult, Mutator, MutatorsTuple,
}, },
state::{HasCorpus, HasMetadata, HasRand}, state::{HasCorpus, HasRand},
Error, Error, HasMetadata,
}; };
/// The metadata placed in a [`crate::corpus::Testcase`] by a [`LoggerScheduledMutator`]. /// The metadata placed in a [`crate::corpus::Testcase`] by a [`LoggerScheduledMutator`].

View File

@ -16,7 +16,8 @@ use crate::{
mutational::{MutatedTransform, MutatedTransformPost}, mutational::{MutatedTransform, MutatedTransformPost},
StringIdentificationMetadata, StringIdentificationMetadata,
}, },
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand}, state::{HasCorpus, HasMaxSize, HasRand},
HasMetadata,
}; };
/// Unicode category data, as used by string analysis and mutators. /// Unicode category data, as used by string analysis and mutators.

View File

@ -30,8 +30,8 @@ use crate::{
}, },
observers::cmp::{AFLppCmpValuesMetadata, CmpValues, CmpValuesMetadata}, observers::cmp::{AFLppCmpValuesMetadata, CmpValues, CmpValuesMetadata},
stages::TaintMetadata, stages::TaintMetadata,
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand}, state::{HasCorpus, HasMaxSize, HasRand},
Error, Error, HasMetadata,
}; };
/// A state metadata holding a list of tokens /// A state metadata holding a list of tokens

View File

@ -18,8 +18,8 @@ use crate::{
mutators::{ mutators::{
ComposedByMutations, MutationId, MutationResult, Mutator, MutatorsTuple, ScheduledMutator, ComposedByMutations, MutationId, MutationResult, Mutator, MutatorsTuple, ScheduledMutator,
}, },
state::{HasMetadata, HasRand}, state::HasRand,
Error, Error, HasMetadata,
}; };
/// Metadata in the state, that controls the behavior of the [`TuneableScheduledMutator`] at runtime /// Metadata in the state, that controls the behavior of the [`TuneableScheduledMutator`] at runtime

View File

@ -11,9 +11,7 @@ use hashbrown::HashMap;
use libafl_bolts::{ownedref::OwnedRefMut, serdeany::SerdeAny, AsMutSlice, AsSlice, Named}; use libafl_bolts::{ownedref::OwnedRefMut, serdeany::SerdeAny, AsMutSlice, AsSlice, Named};
use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde::{de::DeserializeOwned, Deserialize, Serialize};
use crate::{ use crate::{executors::ExitKind, inputs::UsesInput, observers::Observer, Error, HasMetadata};
executors::ExitKind, inputs::UsesInput, observers::Observer, state::HasMetadata, Error,
};
/// Generic metadata trait for use in a `CmpObserver`, which adds comparisons from a `CmpObserver` /// Generic metadata trait for use in a `CmpObserver`, which adds comparisons from a `CmpObserver`
/// primarily intended for use with `AFLppCmpValuesMetadata` or `CmpValuesMetadata` /// primarily intended for use with `AFLppCmpValuesMetadata` or `CmpValuesMetadata`

View File

@ -16,8 +16,8 @@ use crate::{
minimizer::{IsFavoredMetadata, MinimizerScheduler, DEFAULT_SKIP_NON_FAVORED_PROB}, minimizer::{IsFavoredMetadata, MinimizerScheduler, DEFAULT_SKIP_NON_FAVORED_PROB},
LenTimeMulTestcaseScore, Scheduler, LenTimeMulTestcaseScore, Scheduler,
}, },
state::{HasCorpus, HasMetadata, HasRand, UsesState}, state::{HasCorpus, HasRand, UsesState},
Error, Error, HasMetadata,
}; };
/// A testcase metadata holding a list of indexes of a map /// A testcase metadata holding a list of indexes of a map

View File

@ -14,8 +14,8 @@ use crate::{
inputs::UsesInput, inputs::UsesInput,
observers::ObserversTuple, observers::ObserversTuple,
schedulers::{LenTimeMulTestcaseScore, RemovableScheduler, Scheduler, TestcaseScore}, schedulers::{LenTimeMulTestcaseScore, RemovableScheduler, Scheduler, TestcaseScore},
state::{HasCorpus, HasMetadata, HasRand, UsesState}, state::{HasCorpus, HasRand, UsesState},
Error, Error, HasMetadata,
}; };
/// Default probability to skip the non-favored values /// Default probability to skip the non-favored values

View File

@ -35,8 +35,8 @@ use crate::{
inputs::UsesInput, inputs::UsesInput,
observers::{MapObserver, ObserversTuple}, observers::{MapObserver, ObserversTuple},
random_corpus_id, random_corpus_id,
state::{HasCorpus, HasMetadata, HasRand, State, UsesState}, state::{HasCorpus, HasRand, State, UsesState},
Error, Error, HasMetadata,
}; };
/// The scheduler also implements `on_remove` and `on_replace` if it implements this stage. /// The scheduler also implements `on_remove` and `on_replace` if it implements this stage.

View File

@ -13,8 +13,8 @@ use crate::{
inputs::UsesInput, inputs::UsesInput,
observers::{MapObserver, ObserversTuple}, observers::{MapObserver, ObserversTuple},
schedulers::{HasAFLSchedulerMetadata, RemovableScheduler, Scheduler}, schedulers::{HasAFLSchedulerMetadata, RemovableScheduler, Scheduler},
state::{HasCorpus, HasMetadata, State, UsesState}, state::{HasCorpus, State, UsesState},
Error, Error, HasMetadata,
}; };
/// The n fuzz size /// The n fuzz size

View File

@ -12,8 +12,8 @@ use crate::{
corpus::{Corpus, CorpusId, HasTestcase, Testcase}, corpus::{Corpus, CorpusId, HasTestcase, Testcase},
inputs::UsesInput, inputs::UsesInput,
schedulers::{RemovableScheduler, Scheduler, TestcaseScore}, schedulers::{RemovableScheduler, Scheduler, TestcaseScore},
state::{HasCorpus, HasMetadata, HasRand, State, UsesState}, state::{HasCorpus, HasRand, State, UsesState},
Error, Error, HasMetadata,
}; };
/// Conduct reservoir sampling (probabilistic sampling) over all corpus elements. /// Conduct reservoir sampling (probabilistic sampling) over all corpus elements.
@ -202,8 +202,8 @@ mod tests {
feedbacks::ConstFeedback, feedbacks::ConstFeedback,
inputs::{bytes::BytesInput, Input, UsesInput}, inputs::{bytes::BytesInput, Input, UsesInput},
schedulers::{ProbabilitySamplingScheduler, Scheduler, TestcaseScore}, schedulers::{ProbabilitySamplingScheduler, Scheduler, TestcaseScore},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
const FACTOR: f64 = 1337.0; const FACTOR: f64 = 1337.0;

View File

@ -11,8 +11,8 @@ use crate::{
minimizer::{IsFavoredMetadata, TopRatedsMetadata}, minimizer::{IsFavoredMetadata, TopRatedsMetadata},
powersched::{PowerSchedule, SchedulerMetadata}, powersched::{PowerSchedule, SchedulerMetadata},
}, },
state::{HasCorpus, HasMetadata}, state::HasCorpus,
Error, Error, HasMetadata,
}; };
/// Compute the favor factor of a [`Testcase`]. Higher is better. /// Compute the favor factor of a [`Testcase`]. Higher is better.

View File

@ -12,8 +12,8 @@ use super::RemovableScheduler;
use crate::{ use crate::{
corpus::{Corpus, CorpusId, HasTestcase}, corpus::{Corpus, CorpusId, HasTestcase},
schedulers::Scheduler, schedulers::Scheduler,
state::{HasCorpus, HasMetadata, State, UsesState}, state::{HasCorpus, State, UsesState},
Error, Error, HasMetadata,
}; };
#[derive(Default, Clone, Copy, Eq, PartialEq, Debug, Serialize, Deserialize)] #[derive(Default, Clone, Copy, Eq, PartialEq, Debug, Serialize, Deserialize)]

View File

@ -18,8 +18,8 @@ use crate::{
testcase_score::{CorpusWeightTestcaseScore, TestcaseScore}, testcase_score::{CorpusWeightTestcaseScore, TestcaseScore},
HasAFLSchedulerMetadata, RemovableScheduler, Scheduler, HasAFLSchedulerMetadata, RemovableScheduler, Scheduler,
}, },
state::{HasCorpus, HasMetadata, HasRand, State, UsesState}, state::{HasCorpus, HasRand, State, UsesState},
Error, Error, HasMetadata,
}; };
/// The Metadata for `WeightedScheduler` /// The Metadata for `WeightedScheduler`

View File

@ -21,11 +21,8 @@ use crate::{
observers::{MapObserver, ObserversTuple, UsesObserver}, observers::{MapObserver, ObserversTuple, UsesObserver},
schedulers::powersched::SchedulerMetadata, schedulers::powersched::SchedulerMetadata,
stages::{ExecutionCountRestartHelper, Stage}, stages::{ExecutionCountRestartHelper, Stage},
state::{ state::{HasCorpus, HasCurrentTestcase, HasExecutions, State, UsesState},
HasCorpus, HasCurrentTestcase, HasExecutions, HasMetadata, HasNamedMetadata, State, Error, HasMetadata, HasNamedMetadata,
UsesState,
},
Error,
}; };
/// The metadata to keep unstable entries /// The metadata to keep unstable entries

View File

@ -16,8 +16,8 @@ use crate::{
mutators::mutations::buffer_copy, mutators::mutations::buffer_copy,
observers::{MapObserver, ObserversTuple}, observers::{MapObserver, ObserversTuple},
stages::{RetryRestartHelper, Stage}, stages::{RetryRestartHelper, Stage},
state::{HasCorpus, HasCurrentTestcase, HasMetadata, HasNamedMetadata, HasRand, UsesState}, state::{HasCorpus, HasCurrentTestcase, HasRand, UsesState},
Error, Error, HasMetadata, HasNamedMetadata,
}; };
// Bigger range is better // Bigger range is better

View File

@ -18,10 +18,8 @@ use crate::{
executors::{Executor, HasObservers}, executors::{Executor, HasObservers},
observers::concolic::ConcolicObserver, observers::concolic::ConcolicObserver,
stages::{RetryRestartHelper, Stage, TracingStage}, stages::{RetryRestartHelper, Stage, TracingStage},
state::{ state::{HasCorpus, HasCurrentTestcase, HasExecutions, UsesState},
HasCorpus, HasCurrentTestcase, HasExecutions, HasMetadata, HasNamedMetadata, UsesState, Error, HasMetadata, HasNamedMetadata,
},
Error,
}; };
#[cfg(feature = "concolic_mutation")] #[cfg(feature = "concolic_mutation")]
use crate::{ use crate::{

View File

@ -11,8 +11,8 @@ use crate::{
corpus::{Corpus, CorpusId}, corpus::{Corpus, CorpusId},
inputs::UsesInput, inputs::UsesInput,
stages::Stage, stages::Stage,
state::{HasCorpus, HasMetadata, HasRand, HasSolutions, UsesState}, state::{HasCorpus, HasRand, HasSolutions, UsesState},
Error, Error, HasMetadata,
}; };
/// Metadata used to store information about disk dump indexes for names /// Metadata used to store information about disk dump indexes for names

View File

@ -17,8 +17,8 @@ use crate::{
observers::{MapObserver, ObserversTuple}, observers::{MapObserver, ObserversTuple},
stages::{RetryRestartHelper, Stage}, stages::{RetryRestartHelper, Stage},
start_timer, start_timer,
state::{HasCorpus, HasExecutions, HasMetadata, HasNamedMetadata, UsesState}, state::{HasCorpus, HasExecutions, UsesState},
Error, Error, HasMetadata, HasNamedMetadata,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -46,11 +46,9 @@ use crate::{
observers::ObserversTuple, observers::ObserversTuple,
schedulers::Scheduler, schedulers::Scheduler,
stages::push::PushStage, stages::push::PushStage,
state::{ state::{HasCorpus, HasExecutions, HasLastReportTime, HasRand, State, UsesState},
HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasNamedMetadata, HasRand, State, Error, EvaluatorObservers, ExecutesInput, ExecutionProcessor, HasMetadata, HasNamedMetadata,
UsesState, HasScheduler,
},
Error, EvaluatorObservers, ExecutesInput, ExecutionProcessor, HasScheduler,
}; };
/// Mutational stage is the normal fuzzing stage. /// Mutational stage is the normal fuzzing stage.
@ -655,7 +653,8 @@ pub mod test {
corpus::{Corpus, HasCurrentCorpusIdx, Testcase}, corpus::{Corpus, HasCurrentCorpusIdx, Testcase},
inputs::NopInput, inputs::NopInput,
stages::{RetryRestartHelper, Stage}, stages::{RetryRestartHelper, Stage},
state::{test::test_std_state, HasCorpus, HasMetadata, State, UsesState}, state::{test::test_std_state, HasCorpus, State, UsesState},
HasMetadata,
}; };
#[derive(Debug)] #[derive(Debug)]

View File

@ -13,11 +13,8 @@ use crate::{
mutators::{MultiMutator, MutationResult, Mutator}, mutators::{MultiMutator, MutationResult, Mutator},
stages::{ExecutionCountRestartHelper, RetryRestartHelper, Stage}, stages::{ExecutionCountRestartHelper, RetryRestartHelper, Stage},
start_timer, start_timer,
state::{ state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasRand, UsesState},
HasCorpus, HasCurrentTestcase, HasExecutions, HasMetadata, HasNamedMetadata, HasRand, Error, HasMetadata, HasNamedMetadata,
UsesState,
},
Error,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -8,8 +8,8 @@ use crate::{
mutators::Mutator, mutators::Mutator,
schedulers::{testcase_score::CorpusPowerTestcaseScore, TestcaseScore}, schedulers::{testcase_score::CorpusPowerTestcaseScore, TestcaseScore},
stages::{mutational::MutatedTransform, ExecutionCountRestartHelper, MutationalStage, Stage}, stages::{mutational::MutatedTransform, ExecutionCountRestartHelper, MutationalStage, Stage},
state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasMetadata, HasRand, UsesState}, state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasRand, UsesState},
Error, Error, HasMetadata,
}; };
/// The mutational stage using power schedules /// The mutational stage using power schedules

View File

@ -22,8 +22,8 @@ use crate::{
inputs::UsesInput, inputs::UsesInput,
observers::ObserversTuple, observers::ObserversTuple,
schedulers::Scheduler, schedulers::Scheduler,
state::{HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand}, state::{HasCorpus, HasExecutions, HasLastReportTime, HasRand},
Error, EvaluatorObservers, ExecutionProcessor, HasScheduler, Error, EvaluatorObservers, ExecutionProcessor, HasMetadata, HasScheduler,
}; };
/// Send a monitor update all 15 (or more) seconds /// Send a monitor update all 15 (or more) seconds

View File

@ -20,8 +20,8 @@ use crate::{
observers::ObserversTuple, observers::ObserversTuple,
schedulers::Scheduler, schedulers::Scheduler,
start_timer, start_timer,
state::{HasCorpus, HasExecutions, HasLastReportTime, HasMetadata, HasRand}, state::{HasCorpus, HasExecutions, HasLastReportTime, HasRand},
Error, EvaluatorObservers, ExecutionProcessor, HasScheduler, Error, EvaluatorObservers, ExecutionProcessor, HasMetadata, HasScheduler,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -13,8 +13,8 @@ use crate::{
events::EventFirer, events::EventFirer,
schedulers::minimizer::IsFavoredMetadata, schedulers::minimizer::IsFavoredMetadata,
stages::Stage, stages::Stage,
state::{HasCorpus, HasImported, HasMetadata, UsesState}, state::{HasCorpus, HasImported, UsesState},
Error, Error, HasMetadata,
}; };
#[cfg(feature = "std")] #[cfg(feature = "std")]
use crate::{ use crate::{

View File

@ -11,7 +11,8 @@ use crate::{
corpus::HasTestcase, corpus::HasTestcase,
inputs::{BytesInput, HasBytesVec}, inputs::{BytesInput, HasBytesVec},
stages::Stage, stages::Stage,
state::{HasCorpus, HasCurrentTestcase, HasMetadata, State, UsesState}, state::{HasCorpus, HasCurrentTestcase, State, UsesState},
HasMetadata,
}; };
/// Metadata which stores the list of pre-computed string-like ranges in the input /// Metadata which stores the list of pre-computed string-like ranges in the input

View File

@ -19,8 +19,8 @@ use crate::{
fuzzer::{Evaluator, EvaluatorObservers, ExecutionProcessor}, fuzzer::{Evaluator, EvaluatorObservers, ExecutionProcessor},
inputs::{Input, InputConverter, UsesInput}, inputs::{Input, InputConverter, UsesInput},
stages::{RetryRestartHelper, Stage}, stages::{RetryRestartHelper, Stage},
state::{HasCorpus, HasExecutions, HasMetadata, HasNamedMetadata, HasRand, State, UsesState}, state::{HasCorpus, HasExecutions, HasRand, State, UsesState},
Error, Error, HasMetadata, HasNamedMetadata,
}; };
/// Metadata used to store information about disk sync time /// Metadata used to store information about disk sync time

View File

@ -22,10 +22,9 @@ use crate::{
}, },
start_timer, start_timer,
state::{ state::{
HasCorpus, HasCurrentTestcase, HasExecutions, HasMaxSize, HasMetadata, HasSolutions, State, HasCorpus, HasCurrentTestcase, HasExecutions, HasMaxSize, HasSolutions, State, UsesState,
UsesState,
}, },
Error, ExecutesInput, ExecutionProcessor, HasFeedback, HasScheduler, Error, ExecutesInput, ExecutionProcessor, HasFeedback, HasMetadata, HasScheduler,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -10,8 +10,8 @@ use crate::{
observers::ObserversTuple, observers::ObserversTuple,
stages::{RetryRestartHelper, Stage}, stages::{RetryRestartHelper, Stage},
start_timer, start_timer,
state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasNamedMetadata, State, UsesState}, state::{HasCorpus, HasCurrentTestcase, HasExecutions, State, UsesState},
Error, Error, HasNamedMetadata,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -14,11 +14,8 @@ use crate::{
ExecutionCountRestartHelper, MutationalStage, Stage, ExecutionCountRestartHelper, MutationalStage, Stage,
}, },
start_timer, start_timer,
state::{ state::{HasCorpus, HasCurrentTestcase, HasExecutions, HasRand, UsesState},
HasCorpus, HasCurrentTestcase, HasExecutions, HasMetadata, HasNamedMetadata, HasRand, Error, Evaluator, HasMetadata, HasNamedMetadata,
UsesState,
},
Error, Evaluator,
}; };
#[cfg(feature = "introspection")] #[cfg(feature = "introspection")]
use crate::{monitors::PerfFeature, state::HasClientPerfMonitor}; use crate::{monitors::PerfFeature, state::HasClientPerfMonitor};

View File

@ -1,6 +1,6 @@
//! The fuzzer, and state are the core pieces of every good fuzzer //! The fuzzer, and state are the core pieces of every good fuzzer
use alloc::{boxed::Box, vec::Vec}; use alloc::vec::Vec;
use core::{ use core::{
borrow::BorrowMut, borrow::BorrowMut,
cell::{Ref, RefMut}, cell::{Ref, RefMut},
@ -18,7 +18,7 @@ use std::{
use libafl_bolts::core_affinity::{CoreId, Cores}; use libafl_bolts::core_affinity::{CoreId, Cores};
use libafl_bolts::{ use libafl_bolts::{
rands::{Rand, StdRand}, rands::{Rand, StdRand},
serdeany::{NamedSerdeAnyMap, SerdeAny, SerdeAnyMap}, serdeany::{NamedSerdeAnyMap, SerdeAnyMap},
}; };
use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde::{de::DeserializeOwned, Deserialize, Serialize};
@ -34,7 +34,7 @@ use crate::{
generators::Generator, generators::Generator,
inputs::{Input, UsesInput}, inputs::{Input, UsesInput},
stages::{HasCurrentStage, HasNestedStageStatus}, stages::{HasCurrentStage, HasNestedStageStatus},
Error, Error, HasMetadata, HasNamedMetadata,
}; };
/// The maximum size of a testcase /// The maximum size of a testcase
@ -155,149 +155,6 @@ pub trait HasScalabilityMonitor {
fn scalability_monitor_mut(&mut self) -> &mut ScalabilityMonitor; fn scalability_monitor_mut(&mut self) -> &mut ScalabilityMonitor;
} }
/// Trait for elements offering metadata
pub trait HasMetadata {
/// A map, storing all metadata
fn metadata_map(&self) -> &SerdeAnyMap;
/// A map, storing all metadata (mutable)
fn metadata_map_mut(&mut self) -> &mut SerdeAnyMap;
/// Add a metadata to the metadata map
#[inline]
fn add_metadata<M>(&mut self, meta: M)
where
M: SerdeAny,
{
self.metadata_map_mut().insert(meta);
}
/// Gets metadata, or inserts it using the given construction function `default`
fn metadata_or_insert_with<M>(&mut self, default: impl FnOnce() -> M) -> &mut M
where
M: SerdeAny,
{
self.metadata_map_mut().get_or_insert_with::<M>(default)
}
/// Remove a metadata from the metadata map
#[inline]
fn remove_metadata<M>(&mut self) -> Option<Box<M>>
where
M: SerdeAny,
{
self.metadata_map_mut().remove::<M>()
}
/// Check for a metadata
///
/// # Note
/// For performance reasons, you likely want to use [`Self::metadata_or_insert_with`] instead
#[inline]
fn has_metadata<M>(&self) -> bool
where
M: SerdeAny,
{
self.metadata_map().get::<M>().is_some()
}
/// To get metadata
#[inline]
fn metadata<M>(&self) -> Result<&M, Error>
where
M: SerdeAny,
{
self.metadata_map().get::<M>().ok_or_else(|| {
Error::key_not_found(format!("{} not found", core::any::type_name::<M>()))
})
}
/// To get mutable metadata
#[inline]
fn metadata_mut<M>(&mut self) -> Result<&mut M, Error>
where
M: SerdeAny,
{
self.metadata_map_mut().get_mut::<M>().ok_or_else(|| {
Error::key_not_found(format!("{} not found", core::any::type_name::<M>()))
})
}
}
/// Trait for elements offering named metadata
pub trait HasNamedMetadata {
/// A map, storing all metadata
fn named_metadata_map(&self) -> &NamedSerdeAnyMap;
/// A map, storing all metadata (mutable)
fn named_metadata_map_mut(&mut self) -> &mut NamedSerdeAnyMap;
/// Add a metadata to the metadata map
#[inline]
fn add_named_metadata<M>(&mut self, name: &str, meta: M)
where
M: SerdeAny,
{
self.named_metadata_map_mut().insert(name, meta);
}
/// Add a metadata to the metadata map
#[inline]
fn remove_named_metadata<M>(&mut self, name: &str) -> Option<Box<M>>
where
M: SerdeAny,
{
self.named_metadata_map_mut().remove::<M>(name)
}
/// Gets metadata, or inserts it using the given construction function `default`
fn named_metadata_or_insert_with<M>(
&mut self,
name: &str,
default: impl FnOnce() -> M,
) -> &mut M
where
M: SerdeAny,
{
self.named_metadata_map_mut()
.get_or_insert_with::<M>(name, default)
}
/// Check for a metadata
///
/// # Note
/// You likely want to use [`Self::named_metadata_or_insert_with`] for performance reasons.
#[inline]
fn has_named_metadata<M>(&self, name: &str) -> bool
where
M: SerdeAny,
{
self.named_metadata_map().contains::<M>(name)
}
/// To get named metadata
#[inline]
fn named_metadata<M>(&self, name: &str) -> Result<&M, Error>
where
M: SerdeAny,
{
self.named_metadata_map().get::<M>(name).ok_or_else(|| {
Error::key_not_found(format!("{} not found", core::any::type_name::<M>()))
})
}
/// To get mutable named metadata
#[inline]
fn named_metadata_mut<M>(&mut self, name: &str) -> Result<&mut M, Error>
where
M: SerdeAny,
{
self.named_metadata_map_mut()
.get_mut::<M>(name)
.ok_or_else(|| {
Error::key_not_found(format!("{} not found", core::any::type_name::<M>()))
})
}
}
/// Trait for the execution counter /// Trait for the execution counter
pub trait HasExecutions { pub trait HasExecutions {
/// The executions counter /// The executions counter

View File

@ -18,8 +18,8 @@ use libafl::{
feedbacks::Feedback, feedbacks::Feedback,
inputs::{HasTargetBytes, UsesInput}, inputs::{HasTargetBytes, UsesInput},
observers::{Observer, ObserversTuple}, observers::{Observer, ObserversTuple},
state::{HasMetadata, State}, state::State,
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ownedref::OwnedPtr, Named, SerdeAny}; use libafl_bolts::{ownedref::OwnedPtr, Named, SerdeAny};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -9,8 +9,8 @@ use libafl::{
feedbacks::{Feedback, MinMapFeedback}, feedbacks::{Feedback, MinMapFeedback},
inputs::{BytesInput, Input}, inputs::{BytesInput, Input},
observers::ObserversTuple, observers::ObserversTuple,
state::{HasMetadata, State}, state::State,
Error, Error, HasMetadata,
}; };
use libafl_bolts::{impl_serdeany, Named}; use libafl_bolts::{impl_serdeany, Named};
use libafl_targets::OomFeedback; use libafl_targets::OomFeedback;

View File

@ -23,8 +23,8 @@ use libafl::{
Monitor, MultiMonitor, SimpleMonitor, Monitor, MultiMonitor, SimpleMonitor,
}, },
stages::{HasCurrentStage, StagesTuple}, stages::{HasCurrentStage, StagesTuple},
state::{HasExecutions, HasLastReportTime, HasMetadata, HasSolutions, UsesState}, state::{HasExecutions, HasLastReportTime, HasSolutions, UsesState},
Error, Fuzzer, Error, Fuzzer, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -3,7 +3,7 @@ use std::{
path::PathBuf, path::PathBuf,
}; };
use libafl::{state::HasMetadata, Error}; use libafl::{Error, HasMetadata};
use libafl_bolts::impl_serdeany; use libafl_bolts::impl_serdeany;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use utf8_chars::BufReadCharsExt; use utf8_chars::BufReadCharsExt;

View File

@ -7,8 +7,8 @@ use libafl::{
inputs::UsesInput, inputs::UsesInput,
monitors::SimpleMonitor, monitors::SimpleMonitor,
stages::{HasCurrentStage, StagesTuple}, stages::{HasCurrentStage, StagesTuple},
state::{HasExecutions, HasLastReportTime, HasMetadata, HasNamedMetadata}, state::{HasExecutions, HasLastReportTime},
Error, Fuzzer, Error, Fuzzer, HasMetadata, HasNamedMetadata,
}; };
use crate::{fuzz_with, options::LibfuzzerOptions}; use crate::{fuzz_with, options::LibfuzzerOptions};

View File

@ -8,8 +8,8 @@ use libafl::{
feedbacks::MapNoveltiesMetadata, feedbacks::MapNoveltiesMetadata,
inputs::UsesInput, inputs::UsesInput,
schedulers::{RemovableScheduler, Scheduler}, schedulers::{RemovableScheduler, Scheduler},
state::{HasCorpus, HasMetadata, State, UsesState}, state::{HasCorpus, State, UsesState},
Error, Error, HasMetadata,
}; };
#[derive(Clone, Debug)] #[derive(Clone, Debug)]

View File

@ -8,9 +8,7 @@ use std::{
}; };
use addr2line::object::{Object, ObjectSection}; use addr2line::object::{Object, ObjectSection};
use libafl::{ use libafl::{executors::ExitKind, inputs::UsesInput, observers::ObserversTuple, HasMetadata};
executors::ExitKind, inputs::UsesInput, observers::ObserversTuple, state::HasMetadata,
};
use libafl_qemu_sys::GuestAddr; use libafl_qemu_sys::GuestAddr;
use libc::{ use libc::{
c_void, MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_NORESERVE, MAP_PRIVATE, PROT_READ, PROT_WRITE, c_void, MAP_ANON, MAP_FAILED, MAP_FIXED, MAP_NORESERVE, MAP_PRIVATE, PROT_READ, PROT_WRITE,

View File

@ -1,7 +1,7 @@
#[cfg(emulation_mode = "usermode")] #[cfg(emulation_mode = "usermode")]
use capstone::{arch::BuildsCapstone, Capstone, InsnDetail}; use capstone::{arch::BuildsCapstone, Capstone, InsnDetail};
use hashbrown::HashMap; use hashbrown::HashMap;
use libafl::{inputs::UsesInput, state::HasMetadata}; use libafl::{inputs::UsesInput, HasMetadata};
use libafl_qemu_sys::GuestAddr; use libafl_qemu_sys::GuestAddr;
pub use libafl_targets::{ pub use libafl_targets::{
cmps::{ cmps::{

View File

@ -1,9 +1,7 @@
use std::{path::PathBuf, sync::Mutex}; use std::{path::PathBuf, sync::Mutex};
use hashbrown::{hash_map::Entry, HashMap}; use hashbrown::{hash_map::Entry, HashMap};
use libafl::{ use libafl::{executors::ExitKind, inputs::UsesInput, observers::ObserversTuple, HasMetadata};
executors::ExitKind, inputs::UsesInput, observers::ObserversTuple, state::HasMetadata,
};
use libafl_qemu_sys::{GuestAddr, GuestUsize}; use libafl_qemu_sys::{GuestAddr, GuestUsize};
use libafl_targets::drcov::{DrCovBasicBlock, DrCovWriter}; use libafl_targets::drcov::{DrCovBasicBlock, DrCovWriter};
use rangemap::RangeMap; use rangemap::RangeMap;

View File

@ -1,7 +1,7 @@
use std::{cell::UnsafeCell, cmp::max}; use std::{cell::UnsafeCell, cmp::max};
use hashbrown::{hash_map::Entry, HashMap}; use hashbrown::{hash_map::Entry, HashMap};
use libafl::{inputs::UsesInput, state::HasMetadata}; use libafl::{inputs::UsesInput, HasMetadata};
use libafl_qemu_sys::GuestAddr; use libafl_qemu_sys::GuestAddr;
#[cfg(emulation_mode = "systemmode")] #[cfg(emulation_mode = "systemmode")]
use libafl_qemu_sys::GuestPhysAddr; use libafl_qemu_sys::GuestPhysAddr;

View File

@ -8,11 +8,7 @@ use core::{
}; };
#[cfg(feature = "fork")] #[cfg(feature = "fork")]
use libafl::{ use libafl::{events::EventManager, executors::InProcessForkExecutor, state::HasLastReportTime};
events::EventManager,
executors::InProcessForkExecutor,
state::{HasLastReportTime, HasMetadata},
};
use libafl::{ use libafl::{
events::{EventFirer, EventRestarter}, events::{EventFirer, EventRestarter},
executors::{ executors::{
@ -24,7 +20,7 @@ use libafl::{
fuzzer::HasObjective, fuzzer::HasObjective,
observers::{ObserversTuple, UsesObservers}, observers::{ObserversTuple, UsesObservers},
state::{HasCorpus, HasExecutions, HasSolutions, State, UsesState}, state::{HasCorpus, HasExecutions, HasSolutions, State, UsesState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::os::unix_signals::{siginfo_t, ucontext_t, Signal}; use libafl_bolts::os::unix_signals::{siginfo_t, ucontext_t, Signal};
#[cfg(feature = "fork")] #[cfg(feature = "fork")]

View File

@ -4,7 +4,7 @@ use std::{
sync::Mutex, sync::Mutex,
}; };
use libafl::{inputs::UsesInput, state::HasMetadata}; use libafl::{inputs::UsesInput, HasMetadata};
use libafl_qemu_sys::{GuestAddr, MmapPerms}; use libafl_qemu_sys::{GuestAddr, MmapPerms};
use meminterval::{Interval, IntervalTree}; use meminterval::{Interval, IntervalTree};
use thread_local::ThreadLocal; use thread_local::ThreadLocal;

View File

@ -18,8 +18,8 @@ use libafl::{
observers::{HitcountsMapObserver, StdMapObserver, TimeObserver}, observers::{HitcountsMapObserver, StdMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::StdMutationalStage, stages::StdMutationalStage,
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -21,8 +21,8 @@ use libafl::{
observers::{HitcountsMapObserver, TimeObserver}, observers::{HitcountsMapObserver, TimeObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{ShadowTracingStage, StdMutationalStage}, stages::{ShadowTracingStage, StdMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
Error, Error, HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -24,7 +24,8 @@ use libafl::{
observers::{HitcountsMapObserver, TimeObserver, VariableMapObserver}, observers::{HitcountsMapObserver, TimeObserver, VariableMapObserver},
schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler}, schedulers::{IndexesLenTimeMinimizerScheduler, QueueScheduler},
stages::{ShadowTracingStage, StdMutationalStage}, stages::{ShadowTracingStage, StdMutationalStage},
state::{HasCorpus, HasMetadata, StdState}, state::{HasCorpus, StdState},
HasMetadata,
}; };
use libafl_bolts::{ use libafl_bolts::{
core_affinity::Cores, core_affinity::Cores,

View File

@ -11,8 +11,7 @@ use libafl::{
cmp::{AFLppCmpValuesMetadata, CmpMap, CmpObserver, CmpObserverMetadata, CmpValues}, cmp::{AFLppCmpValuesMetadata, CmpMap, CmpObserver, CmpObserverMetadata, CmpValues},
Observer, Observer,
}, },
state::HasMetadata, Error, HasMetadata,
Error,
}; };
use libafl_bolts::{ownedref::OwnedRefMut, Named}; use libafl_bolts::{ownedref::OwnedRefMut, Named};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -9,8 +9,7 @@ use libafl::{
executors::ExitKind, executors::ExitKind,
inputs::UsesInput, inputs::UsesInput,
observers::{cmp::CmpValuesMetadata, CmpMap, CmpObserver, Observer}, observers::{cmp::CmpValuesMetadata, CmpMap, CmpObserver, Observer},
state::HasMetadata, Error, HasMetadata,
Error,
}; };
use libafl_bolts::{ownedref::OwnedMutPtr, Named}; use libafl_bolts::{ownedref::OwnedMutPtr, Named};

Some files were not shown because too many files have changed in this diff Show More