diff --git a/Cargo.lock b/Cargo.lock index ddc1789..0c32252 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,16 +57,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -[[package]] -name = "c2-chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101" -dependencies = [ - "lazy_static", - "ppv-lite86", -] - [[package]] name = "cast" version = "0.2.2" @@ -79,6 +69,12 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "clap" version = "2.33.0" @@ -141,7 +137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" dependencies = [ "arrayvec", - "cfg-if", + "cfg-if 0.1.9", "crossbeam-utils", "lazy_static", "memoffset 0.2.1", @@ -163,7 +159,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" dependencies = [ - "cfg-if", + "cfg-if 0.1.9", "lazy_static", ] @@ -213,12 +209,13 @@ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "getrandom" -version = "0.1.6" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e65cce4e5084b14874c4e7097f38cab54f47ee554f9194673456ea379dcc4c55" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "lazy_static", + "cfg-if 1.0.0", "libc", + "wasi", ] [[package]] @@ -269,15 +266,12 @@ name = "lazy_static" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" -dependencies = [ - "spin", -] [[package]] name = "libc" -version = "0.2.60" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44e80633f007889c7eff624b709ab43c92d708caad982295768a7b13ca3b5eb" +checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" [[package]] name = "log" @@ -285,7 +279,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c275b6ad54070ac2d665eef9197db647b32239c9d244bfb6f041a766d00da5b3" dependencies = [ - "cfg-if", + "cfg-if 0.1.9", ] [[package]] @@ -422,9 +416,9 @@ checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" [[package]] name = "ppv-lite86" -version = "0.2.5" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro2" @@ -446,27 +440,24 @@ dependencies = [ [[package]] name = "rand" -version = "0.7.0" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ - "getrandom", "libc", "rand_chacha", - "rand_core 0.5.0", + "rand_core 0.6.3", "rand_hc", - "rand_pcg", ] [[package]] name = "rand_chacha" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e193067942ef6f485a349a113329140d0ab9e2168ce92274499bb0e9a4190d9d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "autocfg 0.1.5", - "c2-chacha", - "rand_core 0.5.0", + "ppv-lite86", + "rand_core 0.6.3", ] [[package]] @@ -486,20 +477,20 @@ checksum = "d0e7a549d590831370895ab7ba4ea0c1b6b011d106b5ff2da6eee112615e6dc0" [[package]] name = "rand_core" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615e683324e75af5d43d8f7a39ffe3ee4a9dc42c5c701167a71dc59c3a493aca" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ "getrandom", ] [[package]] name = "rand_hc" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "rand_core 0.5.0", + "rand_core 0.6.3", ] [[package]] @@ -516,16 +507,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rand_pcg" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e196346cbbc5c70c77e7b4926147ee8e383a38ee4d15d58a08098b169e492b6" -dependencies = [ - "autocfg 0.1.5", - "rand_core 0.5.0", -] - [[package]] name = "rand_xoshiro" version = "0.1.0" @@ -654,12 +635,6 @@ dependencies = [ "serde", ] -[[package]] -name = "spin" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44363f6f51401c34e7be73db0db371c04705d35efbe9f7d6082e03a921a32c55" - [[package]] name = "syn" version = "0.15.44" @@ -711,6 +686,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + [[package]] name = "winapi" version = "0.3.7" diff --git a/lain/Cargo.toml b/lain/Cargo.toml index 5bce6bb..166b302 100644 --- a/lain/Cargo.toml +++ b/lain/Cargo.toml @@ -11,7 +11,7 @@ keywords = ["lain", "fuzzer", "mutator", "mutate", "mutation"] license = "MIT" [dependencies] -rand = { version = "0.7", features = ["small_rng"] } +rand = { version = "0.8", features = ["small_rng"] } byteorder = "1.2" paste = "1.0" lain_derive = { version = "0.5", path = "../lain_derive" } diff --git a/lain/src/dangerous_numbers.rs b/lain/src/dangerous_numbers.rs index 639f200..d8c9170 100644 --- a/lain/src/dangerous_numbers.rs +++ b/lain/src/dangerous_numbers.rs @@ -63,7 +63,7 @@ macro_rules! dangerous_number { ( $ty:ident, $nums:ident ) => { impl DangerousNumber<$ty> for $ty { fn select_dangerous_number(rng: &mut R) -> $ty { - return $nums[rng.gen_range(0, $nums.len())] as $ty; + return $nums[rng.gen_range(0..$nums.len())] as $ty; } fn dangerous_number_at_index(idx: usize) -> $ty { diff --git a/lain/src/mutator.rs b/lain/src/mutator.rs index 6ee8d0c..f333f66 100644 --- a/lain/src/mutator.rs +++ b/lain/src/mutator.rs @@ -1,7 +1,7 @@ use rand::seq::SliceRandom; use rand::Rng; -use crate::rand::distributions::uniform::{SampleBorrow, SampleUniform}; +use crate::rand::distributions::uniform::SampleUniform; use crate::traits::*; use crate::types::*; use num::{Bounded, NumCast}; @@ -133,7 +133,7 @@ impl Mutator { T: BitXor + Add + Sub + NumCast + Copy, { let num_bits = (std::mem::size_of::() * 8) as u8; - let idx: u8 = self.rng.gen_range(0, num_bits); + let idx: u8 = self.rng.gen_range(0..num_bits); trace!("xoring bit {}", idx); @@ -147,7 +147,7 @@ impl Mutator { T: BitXor + Add + Sub + NumCast + Copy, { let num_bits = (std::mem::size_of::() * 8) as u8; - let bits_to_flip = self.rng.gen_range(1, num_bits + 1) as usize; + let bits_to_flip = self.rng.gen_range(1..=num_bits) as usize; // 64 is chosen here as it's the the max primitive size (in bits) that we support // we choose to do this approach over a vec to avoid an allocation @@ -176,9 +176,9 @@ impl Mutator { + WrappingAdd + WrappingSub, { - let added_num: i64 = self.rng.gen_range(1, 0x10); + let added_num: i64 = self.rng.gen_range(1..0x10); - if self.rng.gen_range(0, 2) == 0 { + if self.rng.gen_range(0..=1) == 0 { trace!("adding {}", added_num); *num = num.wrapping_add(&num::cast(added_num).unwrap()); } else { @@ -188,43 +188,34 @@ impl Mutator { } /// Generates a number in the range from [min, max) (**note**: non-inclusive). Panics if min >= max. - pub fn gen_range(&mut self, min: B1, max: B1) -> T + pub fn gen_range(&mut self, min: T, max: T) -> T where - T: SampleUniform + std::fmt::Display, - B1: SampleBorrow - + std::fmt::Display - + Add - + Mul - + NumCast - + Sub - + PartialEq - + PartialOrd, + T: SampleUniform + PartialOrd + std::fmt::Display, { if min >= max { panic!("cannot gen number where min ({}) >= max ({})", min, max); } trace!("generating number between {} and {}", &min, &max); - let num = self.rng.gen_range(min, max); + let num = self.rng.gen_range(min..max); trace!("got {}", num); num } /// Generates a number weighted to one end of the interval - pub fn gen_weighted_range(&mut self, min: B1, max: B1, weighted: Weighted) -> T + pub fn gen_weighted_range(&mut self, min: T, max: T, weighted: Weighted) -> T where - T: SampleUniform + std::fmt::Display + NumCast, - B1: SampleBorrow + T: SampleUniform + std::fmt::Display + std::fmt::Debug - + Add - + Mul - + NumCast - + Sub + PartialEq + PartialOrd + Copy - + Div, + + NumCast + + Add + + Mul + + Sub + + Div, { use crate::rand::distributions::{Distribution, WeightedIndex}; @@ -245,15 +236,15 @@ impl Mutator { weighted ); - let range = (max - min) + B1::from(1u8).unwrap(); + let range = (max - min) + T::from(1u8).unwrap(); - if range < B1::from(6u8).unwrap() { + if range < T::from(6u8).unwrap() { return self.gen_range(min, max); } - let one_third_of_range: B1 = range / B1::from(3u8).unwrap(); + let one_third_of_range: T = range / T::from(3u8).unwrap(); - let zero = B1::from(0u8).unwrap(); + let zero = T::from(0u8).unwrap(); let mut slices = [ ((zero.clone(), zero.clone()), 0u8), @@ -262,7 +253,7 @@ impl Mutator { ]; for i in 0..3 { - let slice_index = B1::from(i).unwrap(); + let slice_index = T::from(i).unwrap(); let min = min + (slice_index * one_third_of_range); let max = min + one_third_of_range; @@ -293,7 +284,7 @@ impl Mutator { let bounds = slices[subslice_index].0; trace!("subslice has bounds {:?}", bounds); - let num = self.rng.gen_range(bounds.0, bounds.1); + let num = self.rng.gen_range(bounds.0..bounds.1); trace!("got {}", num); diff --git a/testsuite/src/lib.rs b/testsuite/src/lib.rs index 45244ae..78f1799 100644 --- a/testsuite/src/lib.rs +++ b/testsuite/src/lib.rs @@ -997,7 +997,7 @@ mod test { } fn get_mutator() -> Mutator { - let rng = SmallRng::from_seed([1u8; 16]); + let rng = SmallRng::from_seed([1u8; 32]); return Mutator::new(rng); }