Skip to content

Commit be9241f

Browse files
authored
Merge pull request #140 from rchildre3/update-deps-and-rand-algos
Update rand/flate deps, improve rand algos. edition 2024 prep
2 parents 4b013b6 + c6e2663 commit be9241f

8 files changed

Lines changed: 30 additions & 26 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ Released YYYY-MM-DD.
88

99
### Changed
1010

11-
* TODO (or remove section if none)
11+
* Recommend `SmallRng` over `StdRng` in the examples for faster, more lightweight
12+
seeding and sampling
13+
* Updated `rand` dependency from 0.8.5 to 0.10
14+
* Updated `flate2` dependency from 1.0.24 to 1.1
15+
* Rename `gen` variable to `rng` for better 2024 Edition compatability
1216

1317
### Deprecated
1418

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,5 @@ members = [
4040
]
4141

4242
[dev-dependencies]
43-
flate2 = "1.0.24"
44-
rand = "0.8.5"
43+
flate2 = "1.1"
44+
rand = { version = "0.10", default-features = false }

example_crossover/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ authors = ["R. Elliott Childre"]
55
edition = "2021"
66

77
[target.'cfg(fuzzing)'.dependencies]
8-
rand = "0.8"
8+
rand = { version = "0.10", default-features = false }

example_crossover/fuzz/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ edition = "2021"
88
cargo-fuzz = true
99

1010
[dependencies]
11-
rand = "0.8"
11+
rand = { version = "0.10", default-features = false }
1212
libfuzzer-sys = { path = "../.." }
1313
example_crossover = { path = ".." }
1414

example_crossover/fuzz/fuzz_targets/boom.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
use example_crossover::sum;
44
use libfuzzer_sys::{fuzz_crossover, fuzz_mutator, fuzz_target};
5-
use rand::distributions::{Bernoulli, Distribution, Uniform};
6-
use rand::{rngs::StdRng, seq::SliceRandom, SeedableRng};
5+
use rand::distr::{Bernoulli, Distribution, Uniform};
6+
use rand::{rngs::SmallRng, seq::SliceRandom, Rng, SeedableRng};
77
use std::mem::size_of;
88

99
fuzz_target!(|data: &[u8]| {
@@ -17,8 +17,8 @@ fuzz_target!(|data: &[u8]| {
1717
);
1818
});
1919

20-
fn rfp(rng: &mut StdRng) -> f64 {
21-
match Uniform::new_inclusive(0, 10).sample(rng) {
20+
fn rfp<T: Rng>(rng: &mut T) -> f64 {
21+
match Uniform::new_inclusive(0, 10).unwrap().sample(rng) {
2222
0 => f64::NAN,
2323
1 => f64::MIN,
2424
2 => f64::MAX,
@@ -29,24 +29,24 @@ fn rfp(rng: &mut StdRng) -> f64 {
2929
7 => f64::INFINITY,
3030
8 => f64::NEG_INFINITY,
3131
9 => 0.0,
32-
10 => Uniform::new_inclusive(-1.0, 1.0).sample(rng),
32+
10 => Uniform::new_inclusive(-1.0, 1.0).unwrap().sample(rng),
3333
_ => 0.0,
3434
}
3535
}
3636

3737
fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
38-
let mut gen = StdRng::seed_from_u64(seed.into());
38+
let mut rng = SmallRng::seed_from_u64(seed.into());
3939

40-
match Uniform::new_inclusive(0, 3).sample(&mut gen) {
40+
match Uniform::new_inclusive(0, 3).unwrap().sample(&mut rng) {
4141
0 => {
4242
// "Change [an] element"
4343

4444
// Not altering the size, so decode the intended space (i.e. `size`) as floats
4545
let (_, floats, _) = unsafe { data[..size].align_to_mut::<f64>() };
4646

4747
if !floats.is_empty() {
48-
let d = Uniform::new(0, floats.len());
49-
floats[d.sample(&mut gen)] = rfp(&mut gen);
48+
let d = Uniform::new(0, floats.len()).unwrap();
49+
floats[d.sample(&mut rng)] = rfp(&mut rng);
5050
}
5151
}
5252
1 => {
@@ -58,7 +58,7 @@ fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
5858
let (_, floats, _) = unsafe { data[..plus_one].align_to_mut::<f64>() };
5959

6060
let last = floats.last_mut().unwrap();
61-
*last = rfp(&mut gen);
61+
*last = rfp(&mut rng);
6262

6363
return plus_one;
6464
}
@@ -79,7 +79,7 @@ fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
7979

8080
// Not altering the size, so decode the intended space (i.e. `size`) as floats
8181
let (_, floats, _) = unsafe { data[..size].align_to_mut::<f64>() };
82-
floats.shuffle(&mut gen);
82+
floats.shuffle(&mut rng);
8383
}
8484
_ => unreachable!(),
8585
};
@@ -88,7 +88,7 @@ fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
8888
});
8989

9090
fuzz_crossover!(|data1: &[u8], data2: &[u8], out: &mut [u8], seed: u32| {
91-
let mut gen = StdRng::seed_from_u64(seed.into());
91+
let mut rng = SmallRng::seed_from_u64(seed.into());
9292

9393
let bd = Bernoulli::new(0.5).unwrap();
9494

@@ -113,7 +113,7 @@ fuzz_crossover!(|data1: &[u8], data2: &[u8], out: &mut [u8], seed: u32| {
113113
// Put into the destination, floats from either data1 or data2 if the
114114
// Bernoulli distribution succeeds or fails
115115
for i in 0..n {
116-
out_floats[i] = if bd.sample(&mut gen) {
116+
out_floats[i] = if bd.sample(&mut rng) {
117117
d1_floats[i]
118118
} else {
119119
d2_floats[i]

example_mutator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
55
edition = "2018"
66

77
[dependencies]
8-
flate2 = "1.0.20"
8+
flate2 = "1.1"

example_mutator/fuzz/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ edition = "2018"
88
cargo-fuzz = true
99

1010
[dependencies]
11-
flate2 = "1.0.24"
11+
flate2 = "1.1"
1212
libfuzzer-sys = { path = "../.." }
1313

1414
[[bin]]

src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -409,17 +409,17 @@ macro_rules! fuzz_target {
409409
/// ```no_run
410410
/// #![no_main]
411411
///
412-
/// use rand::{rngs::StdRng, Rng, SeedableRng};
412+
/// use rand::{rngs::SmallRng, RngExt, SeedableRng};
413413
///
414414
/// libfuzzer_sys::fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
415-
/// let mut rng = StdRng::seed_from_u64(seed as u64);
415+
/// let mut rng = SmallRng::seed_from_u64(seed as u64);
416416
///
417417
/// # let first_mutation = |_, _, _, _| todo!();
418418
/// # let second_mutation = |_, _, _, _| todo!();
419419
/// # let third_mutation = |_, _, _, _| todo!();
420420
/// # let fourth_mutation = |_, _, _, _| todo!();
421421
/// // Choose which of our four supported kinds of mutations we want to make.
422-
/// match rng.gen_range(0..4) {
422+
/// match rng.random_range(0..4) {
423423
/// 0 => first_mutation(rng, data, size, max_size),
424424
/// 1 => second_mutation(rng, data, size, max_size),
425425
/// 2 => third_mutation(rng, data, size, max_size),
@@ -632,7 +632,7 @@ pub fn fuzzer_mutate(data: &mut [u8], size: usize, max_size: usize) -> usize {
632632
/// #![no_main]
633633
///
634634
/// use libfuzzer_sys::{fuzz_crossover, fuzz_mutator, fuzz_target, fuzzer_mutate};
635-
/// use rand::{rngs::StdRng, Rng, SeedableRng};
635+
/// use rand::{rngs::SmallRng, RngExt, SeedableRng};
636636
/// use std::mem::size_of;
637637
///
638638
/// fuzz_target!(|data: &[u8]| {
@@ -651,11 +651,11 @@ pub fn fuzzer_mutate(data: &mut [u8], size: usize, max_size: usize) -> usize {
651651
/// // Inject some ...potentially problematic values to make the example close
652652
/// // more quickly.
653653
/// fuzz_mutator!(|data: &mut [u8], size: usize, max_size: usize, seed: u32| {
654-
/// let mut gen = StdRng::seed_from_u64(seed.into());
654+
/// let mut rng = SmallRng::seed_from_u64(seed.into());
655655
///
656656
/// let (_, floats, _) = unsafe { data[..size].align_to_mut::<f64>() };
657657
///
658-
/// let x = gen.gen_range(0..=1000);
658+
/// let x = rng.random_range(0..=1000);
659659
/// if x == 0 && !floats.is_empty() {
660660
/// floats[0] = f64::INFINITY;
661661
/// } else if x == 1000 && floats.len() > 1 {

0 commit comments

Comments
 (0)