Made the compat fuzzer ignore any LimitExceeded error (#515)

* Made the compat fuzzer ignore any LimitExceeded error

* Switched from deserialize to deserialize_from

Co-authored-by: Victor Koenders <git@trangar.com>
This commit is contained in:
Trangar 2022-03-03 15:44:28 +01:00 committed by GitHub
parent caa71b5d9f
commit 4d2e75e247
2 changed files with 26 additions and 14 deletions

16
fuzz/Cargo.lock generated
View File

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "arbitrary"
version = "1.0.3"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "510c76ecefdceada737ea728f4f9a84bd2e1ef29f1ba555e560940fe279954de"
checksum = "c38b6b6b79f671c25e1a3e785b7b82d7562ffc9cd3efdc98627e5668a2472490"
[[package]]
name = "bincode"
@ -43,9 +43,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.0.72"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
[[package]]
name = "libfuzzer-sys"
@ -84,18 +84,18 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.135"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2cf9235533494ea2ddcdb794665461814781c53f19d87b76e571a1c35acbad2b"
checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.135"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8dcde03d87d4c973c04be249e7d8f0b35db1c848c487bd43032808e59dd8328d"
checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
dependencies = [
"proc-macro2",
"quote",

View File

@ -43,13 +43,25 @@ fuzz_target!(|data: &[u8]| {
#[allow(deprecated)]
let mut configv1 = bincodev1::config();
configv1.limit(1024);
let bincode_v1: Result<AllTypes, _> = configv1.deserialize(data);
let bincode_v1: Result<AllTypes, _> = configv1.deserialize_from(data);
let bincode_v2: Result<(AllTypes, _), _> = bincode::decode_from_slice(data, config);
if bincode_v1.as_ref().ok() != bincode_v2.as_ref().ok().map(|x| &x.0) {
println!("Bytes: {:?}", data);
println!("Bincode V1: {:?}", bincode_v1);
println!("Bincode V2: {:?}", bincode_v2);
panic!("failed equality check");
match (&bincode_v1, &bincode_v2) {
(Err(e), _) if e.to_string() == "the size limit has been reached" => {},
(_, Err(bincode::error::DecodeError::LimitExceeded)) => {},
(Ok(bincode_v1), Ok((bincode_v2, _))) if bincode_v1 != bincode_v2 => {
println!("Bytes: {:?}", data);
println!("Bincode V1: {:?}", bincode_v1);
println!("Bincode V2: {:?}", bincode_v2);
panic!("failed equality check");
},
(Ok(_), Err(_)) | (Err(_), Ok(_)) => {
println!("Bytes: {:?}", data);
println!("Bincode V1: {:?}", bincode_v1);
println!("Bincode V2: {:?}", bincode_v2);
panic!("failed equality check");
}
_ => {}
}
});