Skip to content

Commit d073e8a

Browse files
michielp1807folkertdev
authored andcommitted
Prevent dict trainer issues with <=10 samples
1 parent daeaa31 commit d073e8a

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

fuzz/fuzz_targets/dictionary_train_fast.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fuzz_target!(|data: (u8, u8, ArbitrarySamples)| {
1111
let k = d + (k as u32 % 256);
1212

1313
// train
14-
let (_dict_size, dict) = assert_eq_rs_c!({
14+
assert_eq_rs_c!({
1515
let mut params = libzstd_rs_sys::ZDICT_fastCover_params_t::default();
1616
params.d = d;
1717
params.k = k;
@@ -34,9 +34,8 @@ fuzz_target!(|data: (u8, u8, ArbitrarySamples)| {
3434
let mut opt_params = libzstd_rs_sys::ZDICT_fastCover_params_t::default();
3535
opt_params.steps = 4;
3636

37-
let mut dict = dict.clone();
38-
39-
let opt_dict_size = ZDICT_optimizeTrainFromBuffer_fastCover(
37+
let mut dict = vec![0u8; samples.dict_size];
38+
let dict_size = ZDICT_optimizeTrainFromBuffer_fastCover(
4039
dict.as_mut_ptr().cast(),
4140
samples.dict_size,
4241
samples.samples.as_ptr().cast(),
@@ -45,6 +44,6 @@ fuzz_target!(|data: (u8, u8, ArbitrarySamples)| {
4544
std::mem::transmute(&mut opt_params),
4645
);
4746

48-
(opt_dict_size, dict)
47+
(dict_size, dict)
4948
});
5049
});

fuzz/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ impl arbitrary::Arbitrary<'_> for ArbitrarySamples {
1919
let total_sample_size = dict_size * 11;
2020
// pick number of samples based on remaining randomness that is left
2121
let nb_samples = u.arbitrary_len::<usize>()?;
22+
if nb_samples <= 10 {
23+
// dict trainer has issues with <= 10 samples: https://github.com/facebook/zstd/issues/3599
24+
return Err(arbitrary::Error::NotEnoughData);
25+
}
2226

2327
// generate random samples from src
2428
let mut samples = Vec::with_capacity(total_sample_size);

0 commit comments

Comments
 (0)