From 80ce3b462d06e8f18da7a0b71e5f183f9cbd6cbe Mon Sep 17 00:00:00 2001 From: Sam Gwilym Date: Mon, 9 Sep 2024 18:01:21 +0100 Subject: [PATCH] Syncify fuzz tests --- Cargo.lock | 1 + earthstar/Cargo.toml | 1 + earthstar/src/cinn25519.rs | 154 ++++++++++-------- earthstar/src/identity_id.rs | 51 +++--- earthstar/src/namespace_id.rs | 49 ++++-- fuzz/fuzz_targets/area_rel_area_encoding.rs | 13 +- .../area_rel_area_encoding_random.rs | 13 +- fuzz/fuzz_targets/entry_encoding.rs | 4 +- fuzz/fuzz_targets/entry_encoding_random.rs | 4 +- fuzz/fuzz_targets/entry_rel_entry_encoding.rs | 13 +- .../entry_rel_entry_encoding_random.rs | 13 +- .../entry_rel_namespace_area_encoding.rs | 13 +- ...ntry_rel_namespace_area_encoding_random.rs | 13 +- .../entry_rel_namespace_range_encoding.rs | 13 +- ...try_rel_namespace_range_encoding_random.rs | 13 +- .../mc_capability_rel_area_encoding.rs | 13 +- .../mc_capability_rel_area_encoding_random.rs | 11 +- .../mc_subspace_capability_encoding.rs | 11 +- .../mc_subspace_capability_encoding_random.rs | 9 +- fuzz/fuzz_targets/path_encoding.rs | 4 +- fuzz/fuzz_targets/path_encoding2.rs | 4 +- fuzz/fuzz_targets/path_encoding3.rs | 4 +- fuzz/fuzz_targets/path_encoding_random.rs | 4 +- fuzz/fuzz_targets/path_encoding_random2.rs | 4 +- fuzz/fuzz_targets/path_encoding_random3.rs | 4 +- fuzz/fuzz_targets/path_rel_path_encoding.rs | 13 +- fuzz/fuzz_targets/path_rel_path_encoding2.rs | 13 +- fuzz/fuzz_targets/path_rel_path_encoding3.rs | 13 +- .../path_rel_path_encoding_random.rs | 8 +- .../path_rel_path_encoding_random2.rs | 8 +- .../path_rel_path_encoding_random3.rs | 8 +- .../range3d_rel_rang3d_encoding_random.rs | 13 +- .../range3d_rel_range3d_encoding.rs | 13 +- fuzz/fuzz_targets/u16be_encoding.rs | 4 +- fuzz/fuzz_targets/u16be_encoding_random.rs | 4 +- fuzz/fuzz_targets/u32be_encoding.rs | 4 +- fuzz/fuzz_targets/u32be_encoding_random.rs | 4 +- fuzz/fuzz_targets/u64be_encoding.rs | 4 +- fuzz/fuzz_targets/u64be_encoding_random.rs | 4 +- fuzz/fuzz_targets/u8be_encoding.rs | 4 +- fuzz/fuzz_targets/u8be_encoding_random.rs | 4 +- fuzz/rust-toolchain.toml | 2 + fuzz/src/encode.rs | 55 +++---- 43 files changed, 275 insertions(+), 339 deletions(-) create mode 100644 fuzz/rust-toolchain.toml diff --git a/Cargo.lock b/Cargo.lock index da9b7c4..a13a7a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -218,6 +218,7 @@ version = "0.1.0" dependencies = [ "arbitrary", "either", + "syncify", "ufotofu", "willow-data-model", "willow-encoding", diff --git a/earthstar/Cargo.toml b/earthstar/Cargo.toml index ebfa9f4..eced8a1 100644 --- a/earthstar/Cargo.toml +++ b/earthstar/Cargo.toml @@ -9,6 +9,7 @@ willow-data-model = { path = "../data-model" } arbitrary = { version = "1.0.2", features = ["derive"]} ufotofu = { version = "0.4.2", features = ["std"] } willow-encoding = { path = "../encoding" } +syncify = "0.1.0" [lints] workspace = true diff --git a/earthstar/src/cinn25519.rs b/earthstar/src/cinn25519.rs index 7dd8a98..4a2fe42 100644 --- a/earthstar/src/cinn25519.rs +++ b/earthstar/src/cinn25519.rs @@ -3,8 +3,6 @@ use arbitrary::{ Arbitrary, Error as ArbitraryError, }; use either::Either; -use ufotofu::local_nb::{BulkConsumer, BulkProducer}; -use willow_encoding::{Decodable, DecodeError, Encodable}; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Shortname(pub Vec); @@ -97,50 +95,96 @@ impl Cinn25519PublicKey Encodable - for Cinn25519PublicKey -{ - async fn encode(&self, consumer: &mut Consumer) -> Result<(), Consumer::Error> - where - Consumer: BulkConsumer, +use syncify::syncify; +use syncify::syncify_replace; + +#[syncify(encoding_sync)] +pub(super) mod encoding { + use super::*; + + #[syncify_replace(use ufotofu::sync::{BulkConsumer, BulkProducer};)] + use ufotofu::local_nb::{BulkConsumer, BulkProducer}; + use willow_encoding::DecodeError; + #[syncify_replace(use willow_encoding::sync::{Encodable, Decodable};)] + use willow_encoding::{Decodable, Encodable}; + + impl Encodable + for Cinn25519PublicKey { - let mut vec = Vec::new(); + async fn encode(&self, consumer: &mut Consumer) -> Result<(), Consumer::Error> + where + Consumer: BulkConsumer, + { + let mut vec = Vec::new(); - vec.extend_from_slice(&self.shortname.0); + vec.extend_from_slice(&self.shortname.0); - consumer - .bulk_consume_full_slice(&self.shortname.0) - .await - .map_err(|f| f.reason)?; + consumer + .bulk_consume_full_slice(&self.shortname.0) + .await + .map_err(|f| f.reason)?; - if MIN_LENGTH < MAX_LENGTH { - consumer.consume(0x0).await?; - } + if MIN_LENGTH < MAX_LENGTH { + consumer.consume(0x0).await?; + } - consumer - .bulk_consume_full_slice(&self.underlying) - .await - .map_err(|f| f.reason)?; + consumer + .bulk_consume_full_slice(&self.underlying) + .await + .map_err(|f| f.reason)?; - Ok(()) + Ok(()) + } } -} -impl Decodable - for Cinn25519PublicKey -{ - async fn decode( - producer: &mut Producer, - ) -> Result::Error>> - where - Producer: BulkProducer, + impl Decodable + for Cinn25519PublicKey { - if MIN_LENGTH == MAX_LENGTH { - let mut shortname_box = vec![0; MIN_LENGTH].into_boxed_slice(); + async fn decode( + producer: &mut Producer, + ) -> Result::Error>> + where + Producer: BulkProducer, + { + if MIN_LENGTH == MAX_LENGTH { + let mut shortname_box = vec![0; MIN_LENGTH].into_boxed_slice(); + + producer + .bulk_overwrite_full_slice(shortname_box.as_mut()) + .await?; + + let mut underlying_slice = [0u8; 32]; + + producer + .bulk_overwrite_full_slice(&mut underlying_slice) + .await?; + + return Ok(Self { + shortname: Shortname(shortname_box.into()), + underlying: underlying_slice, + }); + } - producer - .bulk_overwrite_full_slice(shortname_box.as_mut()) - .await?; + let mut shortname_vec: Vec = Vec::new(); + + loop { + match producer.produce().await { + Ok(Either::Left(item)) => { + // if item is 0x0, stop + if item == 0x0 { + break; + } + + shortname_vec.push(item); + } + Ok(Either::Right(_)) => { + // whatever happens, we won't be able to make a full public key. + // Error! + return Err(DecodeError::InvalidInput); + } + Err(err) => return Err(DecodeError::Producer(err)), + } + } let mut underlying_slice = [0u8; 32]; @@ -148,43 +192,11 @@ impl Decodable .bulk_overwrite_full_slice(&mut underlying_slice) .await?; - return Ok(Self { - shortname: Shortname(shortname_box.into()), + Ok(Self { + shortname: Shortname(shortname_vec), underlying: underlying_slice, - }); + }) } - - let mut shortname_vec: Vec = Vec::new(); - - loop { - match producer.produce().await { - Ok(Either::Left(item)) => { - // if item is 0x0, stop - if item == 0x0 { - break; - } - - shortname_vec.push(item); - } - Ok(Either::Right(_)) => { - // whatever happens, we won't be able to make a full public key. - // Error! - return Err(DecodeError::InvalidInput); - } - Err(err) => return Err(DecodeError::Producer(err)), - } - } - - let mut underlying_slice = [0u8; 32]; - - producer - .bulk_overwrite_full_slice(&mut underlying_slice) - .await?; - - Ok(Self { - shortname: Shortname(shortname_vec), - underlying: underlying_slice, - }) } } diff --git a/earthstar/src/identity_id.rs b/earthstar/src/identity_id.rs index eed7691..e6eedd0 100644 --- a/earthstar/src/identity_id.rs +++ b/earthstar/src/identity_id.rs @@ -1,9 +1,6 @@ +use crate::cinn25519::{Cinn25519PublicKey, Shortname}; use arbitrary::Arbitrary; -use ufotofu::local_nb::{BulkConsumer, BulkProducer}; use willow_data_model::SubspaceId; -use willow_encoding::{Decodable, DecodeError, Encodable}; - -use crate::cinn25519::{Cinn25519PublicKey, Shortname}; #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Arbitrary)] pub struct IdentityIdentifier(Cinn25519PublicKey<4, 4>); @@ -17,24 +14,38 @@ impl Default for IdentityIdentifier { } } -impl Encodable for IdentityIdentifier { - async fn encode(&self, consumer: &mut C) -> Result<(), C::Error> - where - C: BulkConsumer, - { - self.0.encode(consumer).await?; - Ok(()) +use syncify::syncify; +use syncify::syncify_replace; + +#[syncify(encoding_sync)] +pub(super) mod encoding { + use super::*; + + #[syncify_replace(use ufotofu::sync::{BulkConsumer, BulkProducer};)] + use ufotofu::local_nb::{BulkConsumer, BulkProducer}; + use willow_encoding::DecodeError; + #[syncify_replace(use willow_encoding::sync::{Encodable, Decodable};)] + use willow_encoding::{Decodable, Encodable}; + + impl Encodable for IdentityIdentifier { + async fn encode(&self, consumer: &mut C) -> Result<(), C::Error> + where + C: BulkConsumer, + { + self.0.encode(consumer).await?; + Ok(()) + } } -} -impl Decodable for IdentityIdentifier { - async fn decode

(producer: &mut P) -> Result> - where - P: BulkProducer, - { - match Cinn25519PublicKey::decode(producer).await { - Ok(pk) => Ok(Self(pk)), - Err(err) => Err(err), + impl Decodable for IdentityIdentifier { + async fn decode

(producer: &mut P) -> Result> + where + P: BulkProducer, + { + match Cinn25519PublicKey::decode(producer).await { + Ok(pk) => Ok(Self(pk)), + Err(err) => Err(err), + } } } } diff --git a/earthstar/src/namespace_id.rs b/earthstar/src/namespace_id.rs index 43737f5..0b2e84c 100644 --- a/earthstar/src/namespace_id.rs +++ b/earthstar/src/namespace_id.rs @@ -1,7 +1,6 @@ use arbitrary::Arbitrary; -use ufotofu::local_nb::{BulkConsumer, BulkProducer}; + use willow_data_model::NamespaceId; -use willow_encoding::{Decodable, DecodeError, Encodable}; use crate::cinn25519::{Cinn25519PublicKey, Shortname}; @@ -17,24 +16,38 @@ impl Default for NamespaceIdentifier { } } -impl Encodable for NamespaceIdentifier { - async fn encode(&self, consumer: &mut C) -> Result<(), C::Error> - where - C: BulkConsumer, - { - self.0.encode(consumer).await?; - Ok(()) +use syncify::syncify; +use syncify::syncify_replace; + +#[syncify(encoding_sync)] +pub(super) mod encoding { + use super::*; + + #[syncify_replace(use ufotofu::sync::{BulkConsumer, BulkProducer};)] + use ufotofu::local_nb::{BulkConsumer, BulkProducer}; + use willow_encoding::DecodeError; + #[syncify_replace(use willow_encoding::sync::{Encodable, Decodable};)] + use willow_encoding::{Decodable, Encodable}; + + impl Encodable for NamespaceIdentifier { + async fn encode(&self, consumer: &mut C) -> Result<(), C::Error> + where + C: BulkConsumer, + { + self.0.encode(consumer).await?; + Ok(()) + } } -} -impl Decodable for NamespaceIdentifier { - async fn decode

(producer: &mut P) -> Result::Error>> - where - P: BulkProducer, - { - match Cinn25519PublicKey::decode(producer).await { - Ok(pk) => Ok(Self(pk)), - Err(err) => Err(err), + impl Decodable for NamespaceIdentifier { + async fn decode

(producer: &mut P) -> Result::Error>> + where + P: BulkProducer, + { + match Cinn25519PublicKey::decode(producer).await { + Ok(pk) => Ok(Self(pk)), + Err(err) => Err(err), + } } } } diff --git a/fuzz/fuzz_targets/area_rel_area_encoding.rs b/fuzz/fuzz_targets/area_rel_area_encoding.rs index 8dd1b22..3c72156 100644 --- a/fuzz/fuzz_targets/area_rel_area_encoding.rs +++ b/fuzz/fuzz_targets/area_rel_area_encoding.rs @@ -17,12 +17,9 @@ fuzz_target!(|data: ( return; } - smol::block_on(async { - relative_encoding_roundtrip::< - Area<16, 16, 16, IdentityId>, - Area<16, 16, 16, IdentityId>, - TestConsumer, - >(a, out, &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + Area<16, 16, 16, IdentityId>, + Area<16, 16, 16, IdentityId>, + TestConsumer, + >(a, out, &mut consumer) }); diff --git a/fuzz/fuzz_targets/area_rel_area_encoding_random.rs b/fuzz/fuzz_targets/area_rel_area_encoding_random.rs index b80a0a1..7095e1d 100644 --- a/fuzz/fuzz_targets/area_rel_area_encoding_random.rs +++ b/fuzz/fuzz_targets/area_rel_area_encoding_random.rs @@ -3,17 +3,14 @@ use earthstar::identity_id::IdentityIdentifier as IdentityId; use libfuzzer_sys::fuzz_target; use willow_data_model::grouping::Area; -use willow_fuzz::encode::relative_encoding_random_less_strict; +use willow_fuzz::encode::relative_encoding_relation_random; fuzz_target!(|data: (&[u8], Area<16, 16, 16, IdentityId>)| { // fuzzed code goes here let (random_bytes, area) = data; - smol::block_on(async { - relative_encoding_random_less_strict::< - Area<16, 16, 16, IdentityId>, - Area<16, 16, 16, IdentityId>, - >(area, random_bytes) - .await; - }); + relative_encoding_relation_random::, Area<16, 16, 16, IdentityId>>( + area, + random_bytes, + ) }); diff --git a/fuzz/fuzz_targets/entry_encoding.rs b/fuzz/fuzz_targets/entry_encoding.rs index e08bfda..024442b 100644 --- a/fuzz/fuzz_targets/entry_encoding.rs +++ b/fuzz/fuzz_targets/entry_encoding.rs @@ -14,7 +14,5 @@ fuzz_target!(|data: ( )| { let (entry, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(entry, &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(entry, &mut consumer); }); diff --git a/fuzz/fuzz_targets/entry_encoding_random.rs b/fuzz/fuzz_targets/entry_encoding_random.rs index 01fcd9b..82a85bc 100644 --- a/fuzz/fuzz_targets/entry_encoding_random.rs +++ b/fuzz/fuzz_targets/entry_encoding_random.rs @@ -9,7 +9,5 @@ use libfuzzer_sys::fuzz_target; use willow_fuzz::{encode::encoding_random, placeholder_params::FakePayloadDigest}; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::>(data).await; - }); + encoding_random::>(data); }); diff --git a/fuzz/fuzz_targets/entry_rel_entry_encoding.rs b/fuzz/fuzz_targets/entry_rel_entry_encoding.rs index 1a084cd..d1fd8a4 100644 --- a/fuzz/fuzz_targets/entry_rel_entry_encoding.rs +++ b/fuzz/fuzz_targets/entry_rel_entry_encoding.rs @@ -15,12 +15,9 @@ fuzz_target!(|data: ( )| { let (entry_sub, entry_ref, mut consumer) = data; - smol::block_on(async { - relative_encoding_roundtrip::< - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - TestConsumer, - >(entry_sub, entry_ref, &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + TestConsumer, + >(entry_sub, entry_ref, &mut consumer); }); diff --git a/fuzz/fuzz_targets/entry_rel_entry_encoding_random.rs b/fuzz/fuzz_targets/entry_rel_entry_encoding_random.rs index 9e2cc21..befe28d 100644 --- a/fuzz/fuzz_targets/entry_rel_entry_encoding_random.rs +++ b/fuzz/fuzz_targets/entry_rel_entry_encoding_random.rs @@ -4,7 +4,7 @@ use earthstar::identity_id::IdentityIdentifier as IdentityId; use earthstar::namespace_id::NamespaceIdentifier as EsNamespaceId; use libfuzzer_sys::fuzz_target; use willow_data_model::Entry; -use willow_fuzz::encode::relative_encoding_random_less_strict; +use willow_fuzz::encode::relative_encoding_relation_random; use willow_fuzz::placeholder_params::FakePayloadDigest; fuzz_target!(|data: ( @@ -13,11 +13,8 @@ fuzz_target!(|data: ( )| { let (random_bytes, ref_entry) = data; - smol::block_on(async { - relative_encoding_random_less_strict::< - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - >(ref_entry, random_bytes) - .await; - }); + relative_encoding_relation_random::< + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + >(ref_entry, random_bytes) }); diff --git a/fuzz/fuzz_targets/entry_rel_namespace_area_encoding.rs b/fuzz/fuzz_targets/entry_rel_namespace_area_encoding.rs index d2def9b..7f6b16e 100644 --- a/fuzz/fuzz_targets/entry_rel_namespace_area_encoding.rs +++ b/fuzz/fuzz_targets/entry_rel_namespace_area_encoding.rs @@ -22,12 +22,9 @@ fuzz_target!(|data: ( let namespace = entry.namespace_id().clone(); - smol::block_on(async { - relative_encoding_roundtrip::< - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - (EsNamespaceId, Area<16, 16, 16, IdentityId>), - TestConsumer, - >(entry, (namespace, area), &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + (EsNamespaceId, Area<16, 16, 16, IdentityId>), + TestConsumer, + >(entry, (namespace, area), &mut consumer) }); diff --git a/fuzz/fuzz_targets/entry_rel_namespace_area_encoding_random.rs b/fuzz/fuzz_targets/entry_rel_namespace_area_encoding_random.rs index 7158f88..0cc0d82 100644 --- a/fuzz/fuzz_targets/entry_rel_namespace_area_encoding_random.rs +++ b/fuzz/fuzz_targets/entry_rel_namespace_area_encoding_random.rs @@ -5,7 +5,7 @@ use earthstar::namespace_id::NamespaceIdentifier as EsNamespaceId; use libfuzzer_sys::fuzz_target; use willow_data_model::grouping::Area; use willow_data_model::Entry; -use willow_fuzz::encode::relative_encoding_random_less_strict; +use willow_fuzz::encode::relative_encoding_relation_random; use willow_fuzz::placeholder_params::FakePayloadDigest; fuzz_target!( @@ -13,12 +13,9 @@ fuzz_target!( // fuzzed code goes here let (random_bytes, namespaced_area) = data; - smol::block_on(async { - relative_encoding_random_less_strict::< - (EsNamespaceId, Area<16, 16, 16, IdentityId>), - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - >(namespaced_area, random_bytes) - .await; - }); + relative_encoding_relation_random::< + (EsNamespaceId, Area<16, 16, 16, IdentityId>), + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + >(namespaced_area, random_bytes) } ); diff --git a/fuzz/fuzz_targets/entry_rel_namespace_range_encoding.rs b/fuzz/fuzz_targets/entry_rel_namespace_range_encoding.rs index b478c7f..6a13e3a 100644 --- a/fuzz/fuzz_targets/entry_rel_namespace_range_encoding.rs +++ b/fuzz/fuzz_targets/entry_rel_namespace_range_encoding.rs @@ -22,12 +22,9 @@ fuzz_target!(|data: ( let namespace = entry.namespace_id().clone(); - smol::block_on(async { - relative_encoding_roundtrip::< - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - (EsNamespaceId, Range3d<16, 16, 16, IdentityId>), - TestConsumer, - >(entry, (namespace, range_3d), &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + (EsNamespaceId, Range3d<16, 16, 16, IdentityId>), + TestConsumer, + >(entry, (namespace, range_3d), &mut consumer) }); diff --git a/fuzz/fuzz_targets/entry_rel_namespace_range_encoding_random.rs b/fuzz/fuzz_targets/entry_rel_namespace_range_encoding_random.rs index 45e1626..018eb57 100644 --- a/fuzz/fuzz_targets/entry_rel_namespace_range_encoding_random.rs +++ b/fuzz/fuzz_targets/entry_rel_namespace_range_encoding_random.rs @@ -5,7 +5,7 @@ use earthstar::namespace_id::NamespaceIdentifier as EsNamespaceId; use libfuzzer_sys::fuzz_target; use willow_data_model::grouping::Range3d; use willow_data_model::Entry; -use willow_fuzz::encode::relative_encoding_random_less_strict; +use willow_fuzz::encode::relative_encoding_relation_random; use willow_fuzz::placeholder_params::FakePayloadDigest; fuzz_target!( @@ -13,12 +13,9 @@ fuzz_target!( // fuzzed code goes here let (random_bytes, namespaced_range_3d) = data; - smol::block_on(async { - relative_encoding_random_less_strict::< - (EsNamespaceId, Range3d<16, 16, 16, IdentityId>), - Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, - >(namespaced_range_3d, random_bytes) - .await; - }); + relative_encoding_relation_random::< + (EsNamespaceId, Range3d<16, 16, 16, IdentityId>), + Entry<16, 16, 16, EsNamespaceId, IdentityId, FakePayloadDigest>, + >(namespaced_range_3d, random_bytes); } ); diff --git a/fuzz/fuzz_targets/mc_capability_rel_area_encoding.rs b/fuzz/fuzz_targets/mc_capability_rel_area_encoding.rs index 63fe3f2..ea40b85 100644 --- a/fuzz/fuzz_targets/mc_capability_rel_area_encoding.rs +++ b/fuzz/fuzz_targets/mc_capability_rel_area_encoding.rs @@ -38,12 +38,9 @@ fuzz_target!(|data: ( return; } - smol::block_on(async { - relative_encoding_roundtrip::< - McCapability<3, 3, 3, SillyPublicKey, SillySig, SillyPublicKey, SillySig>, - Area<3, 3, 3, SillyPublicKey>, - TestConsumer, - >(cap_with_delegees, out, &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + McCapability<3, 3, 3, SillyPublicKey, SillySig, SillyPublicKey, SillySig>, + Area<3, 3, 3, SillyPublicKey>, + TestConsumer, + >(cap_with_delegees, out, &mut consumer) }); diff --git a/fuzz/fuzz_targets/mc_capability_rel_area_encoding_random.rs b/fuzz/fuzz_targets/mc_capability_rel_area_encoding_random.rs index 6c4de9c..237922f 100644 --- a/fuzz/fuzz_targets/mc_capability_rel_area_encoding_random.rs +++ b/fuzz/fuzz_targets/mc_capability_rel_area_encoding_random.rs @@ -9,11 +9,8 @@ use willow_fuzz::silly_sigs::{SillyPublicKey, SillySig}; fuzz_target!(|data: (&[u8], Area<3, 3, 3, SillyPublicKey>,)| { let (random_bytes, out) = data; - smol::block_on(async { - relative_encoding_random::< - Area<3, 3, 3, SillyPublicKey>, - McCapability<3, 3, 3, SillyPublicKey, SillySig, SillyPublicKey, SillySig>, - >(out, random_bytes) - .await; - }); + relative_encoding_random::< + Area<3, 3, 3, SillyPublicKey>, + McCapability<3, 3, 3, SillyPublicKey, SillySig, SillyPublicKey, SillySig>, + >(out, random_bytes) }); diff --git a/fuzz/fuzz_targets/mc_subspace_capability_encoding.rs b/fuzz/fuzz_targets/mc_subspace_capability_encoding.rs index 4db3f7d..542d92f 100644 --- a/fuzz/fuzz_targets/mc_subspace_capability_encoding.rs +++ b/fuzz/fuzz_targets/mc_subspace_capability_encoding.rs @@ -23,11 +23,8 @@ fuzz_target!(|data: ( last_receiver = delegee; } - smol::block_on(async { - encoding_roundtrip::< - McSubspaceCapability, - TestConsumer, - >(cap_with_delegees, &mut consumer) - .await; - }); + encoding_roundtrip::< + McSubspaceCapability, + TestConsumer, + >(cap_with_delegees, &mut consumer) }); diff --git a/fuzz/fuzz_targets/mc_subspace_capability_encoding_random.rs b/fuzz/fuzz_targets/mc_subspace_capability_encoding_random.rs index e4d2fc9..42fe05a 100644 --- a/fuzz/fuzz_targets/mc_subspace_capability_encoding_random.rs +++ b/fuzz/fuzz_targets/mc_subspace_capability_encoding_random.rs @@ -6,10 +6,7 @@ use willow_fuzz::encode::encoding_random; use willow_fuzz::silly_sigs::{SillyPublicKey, SillySig}; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::< - McSubspaceCapability, - >(data) - .await; - }); + encoding_random::>( + data, + ) }); diff --git a/fuzz/fuzz_targets/path_encoding.rs b/fuzz/fuzz_targets/path_encoding.rs index 5a5a00c..959cced 100644 --- a/fuzz/fuzz_targets/path_encoding.rs +++ b/fuzz/fuzz_targets/path_encoding.rs @@ -12,7 +12,5 @@ const MPL: usize = 300; fuzz_target!(|data: (Path, TestConsumer)| { let (path, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(path, &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(path, &mut consumer); }); diff --git a/fuzz/fuzz_targets/path_encoding2.rs b/fuzz/fuzz_targets/path_encoding2.rs index f81014b..4583a2b 100644 --- a/fuzz/fuzz_targets/path_encoding2.rs +++ b/fuzz/fuzz_targets/path_encoding2.rs @@ -12,7 +12,5 @@ const MPL: usize = 3; fuzz_target!(|data: (Path, TestConsumer)| { let (path, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(path, &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(path, &mut consumer); }); diff --git a/fuzz/fuzz_targets/path_encoding3.rs b/fuzz/fuzz_targets/path_encoding3.rs index 41dfa9f..1787ff7 100644 --- a/fuzz/fuzz_targets/path_encoding3.rs +++ b/fuzz/fuzz_targets/path_encoding3.rs @@ -12,7 +12,5 @@ const MPL: usize = 16; fuzz_target!(|data: (Path, TestConsumer)| { let (path, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(path, &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(path, &mut consumer); }); diff --git a/fuzz/fuzz_targets/path_encoding_random.rs b/fuzz/fuzz_targets/path_encoding_random.rs index 57359e7..3b3b704 100644 --- a/fuzz/fuzz_targets/path_encoding_random.rs +++ b/fuzz/fuzz_targets/path_encoding_random.rs @@ -9,7 +9,5 @@ const MCC: usize = 300; const MPL: usize = 300; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::>(data).await; - }); + encoding_random::>(data); }); diff --git a/fuzz/fuzz_targets/path_encoding_random2.rs b/fuzz/fuzz_targets/path_encoding_random2.rs index 19e6700..a08464a 100644 --- a/fuzz/fuzz_targets/path_encoding_random2.rs +++ b/fuzz/fuzz_targets/path_encoding_random2.rs @@ -9,7 +9,5 @@ const MCC: usize = 3; const MPL: usize = 3; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::>(data).await; - }); + encoding_random::>(data); }); diff --git a/fuzz/fuzz_targets/path_encoding_random3.rs b/fuzz/fuzz_targets/path_encoding_random3.rs index 0f441f9..bd879ff 100644 --- a/fuzz/fuzz_targets/path_encoding_random3.rs +++ b/fuzz/fuzz_targets/path_encoding_random3.rs @@ -9,7 +9,5 @@ const MCC: usize = 4; const MPL: usize = 16; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::>(data).await; - }); + encoding_random::>(data); }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding.rs b/fuzz/fuzz_targets/path_rel_path_encoding.rs index a371b0f..1c14c10 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding.rs @@ -17,12 +17,9 @@ fuzz_target!(|data: ( )| { let (path_sub, path_ref, mut consumer) = data; - smol::block_on(async { - relative_encoding_roundtrip::< - Path, - Path, - TestConsumer, - >(path_sub, path_ref, &mut consumer) - .await; - }); + relative_encoding_roundtrip::, Path, TestConsumer>( + path_sub, + path_ref, + &mut consumer, + ) }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding2.rs b/fuzz/fuzz_targets/path_rel_path_encoding2.rs index d6cdae0..030e361 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding2.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding2.rs @@ -17,12 +17,9 @@ fuzz_target!(|data: ( )| { let (path_sub, path_ref, mut consumer) = data; - smol::block_on(async { - relative_encoding_roundtrip::< - Path, - Path, - TestConsumer, - >(path_sub, path_ref, &mut consumer) - .await; - }); + relative_encoding_roundtrip::, Path, TestConsumer>( + path_sub, + path_ref, + &mut consumer, + ) }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding3.rs b/fuzz/fuzz_targets/path_rel_path_encoding3.rs index 0a31ce5..e7cbd4b 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding3.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding3.rs @@ -17,12 +17,9 @@ fuzz_target!(|data: ( )| { let (path_sub, path_ref, mut consumer) = data; - smol::block_on(async { - relative_encoding_roundtrip::< - Path, - Path, - TestConsumer, - >(path_sub, path_ref, &mut consumer) - .await; - }); + relative_encoding_roundtrip::, Path, TestConsumer>( + path_sub, + path_ref, + &mut consumer, + ) }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding_random.rs b/fuzz/fuzz_targets/path_rel_path_encoding_random.rs index dacb0c1..23a216f 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding_random.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding_random.rs @@ -11,11 +11,5 @@ const MPL: usize = 300; fuzz_target!(|data: (&[u8], Path)| { let (random_bytes, ref_path) = data; - smol::block_on(async { - relative_encoding_random::, Path>( - ref_path, - random_bytes, - ) - .await; - }); + relative_encoding_random::, Path>(ref_path, random_bytes) }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding_random2.rs b/fuzz/fuzz_targets/path_rel_path_encoding_random2.rs index 92cc517..5d674bb 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding_random2.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding_random2.rs @@ -11,11 +11,5 @@ const MPL: usize = 3; fuzz_target!(|data: (&[u8], Path)| { let (random_bytes, ref_path) = data; - smol::block_on(async { - relative_encoding_random::, Path>( - ref_path, - random_bytes, - ) - .await; - }); + relative_encoding_random::, Path>(ref_path, random_bytes) }); diff --git a/fuzz/fuzz_targets/path_rel_path_encoding_random3.rs b/fuzz/fuzz_targets/path_rel_path_encoding_random3.rs index 746bb4c..0f2a66d 100644 --- a/fuzz/fuzz_targets/path_rel_path_encoding_random3.rs +++ b/fuzz/fuzz_targets/path_rel_path_encoding_random3.rs @@ -11,11 +11,5 @@ const MPL: usize = 16; fuzz_target!(|data: (&[u8], Path)| { let (random_bytes, ref_path) = data; - smol::block_on(async { - relative_encoding_random::, Path>( - ref_path, - random_bytes, - ) - .await; - }); + relative_encoding_random::, Path>(ref_path, random_bytes) }); diff --git a/fuzz/fuzz_targets/range3d_rel_rang3d_encoding_random.rs b/fuzz/fuzz_targets/range3d_rel_rang3d_encoding_random.rs index f2f47e2..49f9777 100644 --- a/fuzz/fuzz_targets/range3d_rel_rang3d_encoding_random.rs +++ b/fuzz/fuzz_targets/range3d_rel_rang3d_encoding_random.rs @@ -3,17 +3,14 @@ use earthstar::identity_id::IdentityIdentifier as IdentityId; use libfuzzer_sys::fuzz_target; use willow_data_model::grouping::Range3d; -use willow_fuzz::encode::relative_encoding_random_less_strict; +use willow_fuzz::encode::relative_encoding_relation_random; fuzz_target!(|data: (&[u8], Range3d<16, 16, 16, IdentityId>)| { // fuzzed code goes here let (random_bytes, area) = data; - smol::block_on(async { - relative_encoding_random_less_strict::< - Range3d<16, 16, 16, IdentityId>, - Range3d<16, 16, 16, IdentityId>, - >(area, random_bytes) - .await; - }); + relative_encoding_relation_random::< + Range3d<16, 16, 16, IdentityId>, + Range3d<16, 16, 16, IdentityId>, + >(area, random_bytes); }); diff --git a/fuzz/fuzz_targets/range3d_rel_range3d_encoding.rs b/fuzz/fuzz_targets/range3d_rel_range3d_encoding.rs index ecc3a75..073ada4 100644 --- a/fuzz/fuzz_targets/range3d_rel_range3d_encoding.rs +++ b/fuzz/fuzz_targets/range3d_rel_range3d_encoding.rs @@ -13,12 +13,9 @@ fuzz_target!(|data: ( )| { let (ran, reference, mut consumer) = data; - smol::block_on(async { - relative_encoding_roundtrip::< - Range3d<16, 16, 16, IdentityId>, - Range3d<16, 16, 16, IdentityId>, - TestConsumer, - >(ran, reference, &mut consumer) - .await; - }); + relative_encoding_roundtrip::< + Range3d<16, 16, 16, IdentityId>, + Range3d<16, 16, 16, IdentityId>, + TestConsumer, + >(ran, reference, &mut consumer); }); diff --git a/fuzz/fuzz_targets/u16be_encoding.rs b/fuzz/fuzz_targets/u16be_encoding.rs index 1c67022..fd4353a 100644 --- a/fuzz/fuzz_targets/u16be_encoding.rs +++ b/fuzz/fuzz_targets/u16be_encoding.rs @@ -8,7 +8,5 @@ use willow_fuzz::encode::encoding_roundtrip; fuzz_target!(|data: (u16, TestConsumer)| { let (n, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(U16BE::from(n), &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(U16BE::from(n), &mut consumer); }); diff --git a/fuzz/fuzz_targets/u16be_encoding_random.rs b/fuzz/fuzz_targets/u16be_encoding_random.rs index ef227dd..0895fc3 100644 --- a/fuzz/fuzz_targets/u16be_encoding_random.rs +++ b/fuzz/fuzz_targets/u16be_encoding_random.rs @@ -5,7 +5,5 @@ use willow_encoding::U16BE; use willow_fuzz::encode::encoding_random; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::(data).await; - }); + encoding_random::(data); }); diff --git a/fuzz/fuzz_targets/u32be_encoding.rs b/fuzz/fuzz_targets/u32be_encoding.rs index 21962f0..38b23bf 100644 --- a/fuzz/fuzz_targets/u32be_encoding.rs +++ b/fuzz/fuzz_targets/u32be_encoding.rs @@ -8,7 +8,5 @@ use willow_fuzz::encode::encoding_roundtrip; fuzz_target!(|data: (u32, TestConsumer)| { let (n, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(U32BE::from(n), &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(U32BE::from(n), &mut consumer); }); diff --git a/fuzz/fuzz_targets/u32be_encoding_random.rs b/fuzz/fuzz_targets/u32be_encoding_random.rs index 5dbcc54..7b07bcd 100644 --- a/fuzz/fuzz_targets/u32be_encoding_random.rs +++ b/fuzz/fuzz_targets/u32be_encoding_random.rs @@ -5,7 +5,5 @@ use willow_encoding::U32BE; use willow_fuzz::encode::encoding_random; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::(data).await; - }); + encoding_random::(data); }); diff --git a/fuzz/fuzz_targets/u64be_encoding.rs b/fuzz/fuzz_targets/u64be_encoding.rs index 34eb06e..56435da 100644 --- a/fuzz/fuzz_targets/u64be_encoding.rs +++ b/fuzz/fuzz_targets/u64be_encoding.rs @@ -8,7 +8,5 @@ use willow_fuzz::encode::encoding_roundtrip; fuzz_target!(|data: (u64, TestConsumer)| { let (n, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(U64BE::from(n), &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(U64BE::from(n), &mut consumer); }); diff --git a/fuzz/fuzz_targets/u64be_encoding_random.rs b/fuzz/fuzz_targets/u64be_encoding_random.rs index fd447f6..a2532f2 100644 --- a/fuzz/fuzz_targets/u64be_encoding_random.rs +++ b/fuzz/fuzz_targets/u64be_encoding_random.rs @@ -5,7 +5,5 @@ use willow_encoding::U64BE; use willow_fuzz::encode::encoding_random; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::(data).await; - }); + encoding_random::(data); }); diff --git a/fuzz/fuzz_targets/u8be_encoding.rs b/fuzz/fuzz_targets/u8be_encoding.rs index 64241f1..766102d 100644 --- a/fuzz/fuzz_targets/u8be_encoding.rs +++ b/fuzz/fuzz_targets/u8be_encoding.rs @@ -8,7 +8,5 @@ use willow_fuzz::encode::encoding_roundtrip; fuzz_target!(|data: (u8, TestConsumer)| { let (n, mut consumer) = data; - smol::block_on(async { - encoding_roundtrip::<_, TestConsumer>(U8BE::from(n), &mut consumer).await; - }); + encoding_roundtrip::<_, TestConsumer>(U8BE::from(n), &mut consumer); }); diff --git a/fuzz/fuzz_targets/u8be_encoding_random.rs b/fuzz/fuzz_targets/u8be_encoding_random.rs index 27c6848..a8bce9e 100644 --- a/fuzz/fuzz_targets/u8be_encoding_random.rs +++ b/fuzz/fuzz_targets/u8be_encoding_random.rs @@ -5,7 +5,5 @@ use willow_encoding::U8BE; use willow_fuzz::encode::encoding_random; fuzz_target!(|data: &[u8]| { - smol::block_on(async { - encoding_random::(data).await; - }); + encoding_random::(data); }); diff --git a/fuzz/rust-toolchain.toml b/fuzz/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/fuzz/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" diff --git a/fuzz/src/encode.rs b/fuzz/src/encode.rs index 7c65a3a..1704608 100644 --- a/fuzz/src/encode.rs +++ b/fuzz/src/encode.rs @@ -1,26 +1,27 @@ use ufotofu::{ common::consumer::TestConsumer, - local_nb::{ + sync::consumer::IntoVec, + sync::{ producer::{FromBoxedSlice, FromSlice}, BufferedConsumer, BulkConsumer, }, - sync::consumer::IntoVec, }; use willow_encoding::{ - DecodeError, {Decodable, Encodable, RelativeDecodable, RelativeEncodable}, + sync::{Decodable, Encodable, RelativeDecodable, RelativeEncodable}, + DecodeError, }; -pub async fn encoding_roundtrip(item: T, consumer: &mut TestConsumer) +pub fn encoding_roundtrip(item: T, consumer: &mut TestConsumer) where T: Encodable + Decodable + std::fmt::Debug + PartialEq + Eq, C: BulkConsumer, { - if let Err(_err) = item.encode(consumer).await { + if let Err(_err) = item.encode(consumer) { return; } - if let Err(_err) = consumer.flush().await { + if let Err(_err) = consumer.flush() { return; } @@ -32,18 +33,18 @@ where let mut producer = FromBoxedSlice::from_vec(new_vec); // Check for correct errors - let decoded_item = T::decode(&mut producer).await.unwrap(); + let decoded_item = T::decode(&mut producer).unwrap(); assert_eq!(decoded_item, item); } -pub async fn encoding_random(data: &[u8]) +pub fn encoding_random(data: &[u8]) where T: Encodable + Decodable + std::fmt::Debug, { let mut producer = FromSlice::new(data); - match T::decode(&mut producer).await { + match T::decode(&mut producer) { Ok(item) => { // println!("item {:?}", item); @@ -51,7 +52,7 @@ where // Can we turn it back into the same encoding? let mut consumer = IntoVec::::new(); - item.encode(&mut consumer).await.unwrap(); + item.encode(&mut consumer).unwrap(); let encoded = consumer.as_ref(); @@ -70,13 +71,13 @@ where }; } -pub async fn encoding_random_less_strict(data: &[u8]) +pub fn encoding_relation_random(data: &[u8]) where T: Encodable + Decodable + std::fmt::Debug + PartialEq + Eq, { let mut producer = FromSlice::new(data); - match T::decode(&mut producer).await { + match T::decode(&mut producer) { Ok(item) => { // println!("item {:?}", item); @@ -84,11 +85,11 @@ where // Can we turn it back into the same encoding? let mut consumer = IntoVec::::new(); - item.encode(&mut consumer).await.unwrap(); + item.encode(&mut consumer).unwrap(); let mut producer_2 = FromSlice::new(consumer.as_ref()); - match T::decode(&mut producer_2).await { + match T::decode(&mut producer_2) { Ok(decoded_again) => { assert_eq!(item, decoded_again); } @@ -111,7 +112,7 @@ where }; } -pub async fn relative_encoding_roundtrip( +pub fn relative_encoding_roundtrip( subject: T, reference: R, consumer: &mut TestConsumer, @@ -123,11 +124,11 @@ pub async fn relative_encoding_roundtrip( //println!("item {:?}", subject); //println!("ref {:?}", reference); - if let Err(_err) = subject.relative_encode(&reference, consumer).await { + if let Err(_err) = subject.relative_encode(&reference, consumer) { return; } - if let Err(_err) = consumer.flush().await { + if let Err(_err) = consumer.flush() { return; } @@ -139,19 +140,19 @@ pub async fn relative_encoding_roundtrip( let mut producer = FromBoxedSlice::from_vec(new_vec); // Check for correct errors - let decoded_item = T::relative_decode(&reference, &mut producer).await.unwrap(); + let decoded_item = T::relative_decode(&reference, &mut producer).unwrap(); assert_eq!(decoded_item, subject); } -pub async fn relative_encoding_random(reference: R, data: &[u8]) +pub fn relative_encoding_random(reference: R, data: &[u8]) where T: RelativeEncodable + RelativeDecodable + std::fmt::Debug, R: std::fmt::Debug, { let mut producer = FromSlice::new(data); - match T::relative_decode(&reference, &mut producer).await { + match T::relative_decode(&reference, &mut producer) { Ok(item) => { // It decoded to a valid item! Gasp! // Can we turn it back into the same encoding? @@ -160,9 +161,7 @@ where // println!("item {:?}", item); // println!("ref {:?}", reference); - item.relative_encode(&reference, &mut consumer) - .await - .unwrap(); + item.relative_encode(&reference, &mut consumer).unwrap(); let encoded = consumer.as_ref(); @@ -181,14 +180,14 @@ where }; } -pub async fn relative_encoding_random_less_strict(reference: R, data: &[u8]) +pub fn relative_encoding_relation_random(reference: R, data: &[u8]) where T: RelativeEncodable + RelativeDecodable + std::fmt::Debug + Eq, R: std::fmt::Debug, { let mut producer = FromSlice::new(data); - match T::relative_decode(&reference, &mut producer).await { + match T::relative_decode(&reference, &mut producer) { Ok(item) => { // It decoded to a valid item! Gasp! // Can we turn it back into the same encoding? @@ -197,13 +196,11 @@ where // println!("item {:?}", item); // println!("ref {:?}", reference); - item.relative_encode(&reference, &mut consumer) - .await - .unwrap(); + item.relative_encode(&reference, &mut consumer).unwrap(); let mut producer_2 = FromSlice::new(consumer.as_ref()); - match T::relative_decode(&reference, &mut producer_2).await { + match T::relative_decode(&reference, &mut producer_2) { Ok(decoded_again) => { assert_eq!(item, decoded_again); }