- MSRV set to 1.42.0
- Initial support for executing tests with MIRI
- libfuzzer is now at version 11.0.0
- afl is now at version v2.57b
- honggfuzz is now at version 2.3.1
- Invalid shrinking transformations could result in an empty panic message
- Test name resolution now relies on
core::any::type_nameinstead of backtrace inspection - Generators that panic could result in an empty panic message
With the end goal of bolero becoming a front-end for various types of execution engines outside of fuzzing (e.g. crux, seer, haybale, etc) we're deprecating specific language about fuzzing and going for a more general vocabulary.
- The
fuzz!macro has been deprecated in favor ofcheck! - The
cargo bolero fuzzcommand has been deprecated in favor ofcargo bolero test - The
--fuzzerflag has been deprecated in favor of--engine
In order to achieve a better testing rate, tests are now compiled with --release. In order to opt out of this behavior, --release false can be passed.
Sanitizers provide additional information to the fuzzing engine which produces better results. This is now the default behavior. In order to opt out of this behavior, --sanitizer NONE can be passed.
ValueGeneratornow includes amutatemethod to improve efficiency- AFL and honggfuzz can now be included/excluded from
cargo-bolerowith feature flags - AFL updated to 2.56b
- honggfuzz updated to 2.2
- libfuzzer updated to latest release/10.x
Fuzz tests can now be written inside of unit tests
#[test]
fn my_fuzz_test() {
fuzz!()
.with_type()
.for_each(|value: &Vec<u64>| {
// implement checks
})
}Fuzz targets must now call .cloned() if they wish to take ownership over the generated value, otherwise a reference will be passed.
// before
fn main() {
fuzz!()
.with_type()
.for_each(|value: Vec<u64>| {
// implement checks
})
}// after
fn main() {
fuzz!()
.with_type()
.for_each(|value: &Vec<u64>| {
// implement checks
})
}
// or
fn main() {
fuzz!()
.with_type()
.cloned()
.for_each(|value: Vec<u64>| {
// implement checks
})
}This change makes input iteration quite a bit faster as we're not allocating the generated input everytime.
Because fuzz!() is now compatible with libtest, check!() is no longer needed.