Skip to content

Commit 8b81848

Browse files
committed
other fuzzers: handle larger inputs
1 parent 8f068b5 commit 8b81848

File tree

6 files changed

+118
-163
lines changed

6 files changed

+118
-163
lines changed

fuzz/fuzz_targets/compress.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ use libbz2_rs_sys::BZ_OK;
33
use libfuzzer_sys::fuzz_target;
44

55
fuzz_target!(|data: String| {
6-
let length = 8 * 1024;
7-
let mut deflated = vec![0; length as usize];
8-
let mut length = length as _;
9-
let error = unsafe {
10-
test_libbz2_rs_sys::compress_rs(
11-
deflated.as_mut_ptr().cast(),
12-
&mut length,
6+
let (error, deflated) = unsafe {
7+
test_libbz2_rs_sys::compress_rs_with_capacity(
8+
4096,
139
data.as_ptr().cast(),
1410
data.len() as _,
1511
9,
@@ -18,8 +14,6 @@ fuzz_target!(|data: String| {
1814

1915
assert_eq!(error, BZ_OK);
2016

21-
deflated.truncate(length as usize);
22-
2317
let mut output = [0u8; 1 << 10];
2418
let mut output_len = output.len() as _;
2519
let error = unsafe {

fuzz/fuzz_targets/decompress_chunked.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fn compress_c(data: &[u8]) -> Vec<u8> {
3535
output.resize(output.len() + add_space as usize, 0);
3636

3737
// If resize() reallocates, it may have moved in memory.
38-
stream.next_out = output.as_mut_ptr().cast::<i8>().wrapping_add(used as usize);
38+
stream.next_out = output.as_mut_ptr().cast::<i8>().wrapping_add(used);
3939
stream.avail_out += add_space;
4040

4141
continue;

fuzz/fuzz_targets/end_to_end.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,12 @@ fn decompress_help(input: &[u8]) -> Vec<u8> {
2323
}
2424

2525
fuzz_target!(|data: Vec<u8>| {
26-
let mut length = 8 * 1024;
27-
let mut deflated = vec![0; length as usize];
28-
29-
let error = unsafe {
30-
test_libbz2_rs_sys::compress_c(
31-
deflated.as_mut_ptr().cast(),
32-
&mut length,
33-
data.as_ptr().cast(),
34-
data.len() as _,
35-
9,
36-
)
26+
let (error, deflated) = unsafe {
27+
test_libbz2_rs_sys::compress_c_with_capacity(4096, data.as_ptr().cast(), data.len() as _, 9)
3728
};
3829

3930
assert_eq!(error, BZ_OK);
4031

41-
deflated.truncate(length as _);
42-
4332
let output = decompress_help(&deflated);
4433

4534
if output != data {

test-libbz2-rs-sys/examples/compress.rs

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use core::ffi::c_uint;
2-
3-
use test_libbz2_rs_sys::{compress_c, compress_rs};
1+
use test_libbz2_rs_sys::{compress_c_with_capacity, compress_rs_with_capacity};
42

53
fn main() {
64
let mut it = std::env::args();
@@ -14,22 +12,16 @@ fn main() {
1412
let path = it.next().unwrap();
1513
let input = std::fs::read(&path).unwrap();
1614

17-
let mut dest_vec = vec![0u8; 1 << 28];
18-
19-
let mut dest_len = dest_vec.len() as c_uint;
20-
let dest = dest_vec.as_mut_ptr();
21-
2215
let source = input.as_ptr();
2316
let source_len = input.len() as _;
2417

25-
let err = unsafe { compress_c(dest, &mut dest_len, source, source_len, level) };
18+
let (err, dest_vec) =
19+
unsafe { compress_c_with_capacity(1 << 18, source, source_len, level) };
2620

2721
if err != 0 {
2822
panic!("error {err}");
2923
}
3024

31-
dest_vec.truncate(dest_len as usize);
32-
3325
drop(dest_vec)
3426
}
3527
"rs" => {
@@ -38,22 +30,16 @@ fn main() {
3830
let path = it.next().unwrap();
3931
let input = std::fs::read(&path).unwrap();
4032

41-
let mut dest_vec = vec![0u8; 1 << 28];
42-
43-
let mut dest_len = dest_vec.len() as std::ffi::c_uint;
44-
let dest = dest_vec.as_mut_ptr();
45-
4633
let source = input.as_ptr();
4734
let source_len = input.len() as _;
4835

49-
let err = unsafe { compress_rs(dest, &mut dest_len, source, source_len, level) };
36+
let (err, dest_vec) =
37+
unsafe { compress_rs_with_capacity(1 << 18, source, source_len, level) };
5038

5139
if err != 0 {
5240
panic!("error {err}");
5341
}
5442

55-
dest_vec.truncate(dest_len as usize);
56-
5743
drop(dest_vec)
5844
}
5945
other => panic!("invalid option '{other}', expected one of 'c' or 'rs'"),

test-libbz2-rs-sys/src/chunked.rs

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,8 @@ fn compress_chunked_input() {
141141
let chunked = compress_rs_chunked_input(&mut dest_chunked, SAMPLE1_REF, 256).unwrap();
142142

143143
if !cfg!(miri) {
144-
let mut dest = vec![0; 1 << 18];
145-
let mut dest_len = dest.len() as _;
146-
let err = unsafe {
147-
compress_c(
148-
dest.as_mut_ptr(),
149-
&mut dest_len,
150-
SAMPLE1_REF.as_ptr(),
151-
SAMPLE1_REF.len() as _,
152-
9,
153-
)
154-
};
144+
let (err, dest) = unsafe { compress_c(SAMPLE1_REF.as_ptr(), SAMPLE1_REF.len() as _, 9) };
155145
assert_eq!(err, 0);
156-
dest.truncate(dest_len as usize);
157146

158147
assert_eq!(chunked.len(), dest.len());
159148
assert_eq!(chunked, dest);
@@ -294,19 +283,8 @@ fn compress_chunked_output() {
294283
let chunked = compress_rs_chunked_input(&mut dest_chunked, SAMPLE1_REF, 256).unwrap();
295284

296285
if !cfg!(miri) {
297-
let mut dest = vec![0; 1 << 18];
298-
let mut dest_len = dest.len() as _;
299-
let err = unsafe {
300-
compress_c(
301-
dest.as_mut_ptr(),
302-
&mut dest_len,
303-
SAMPLE1_REF.as_ptr(),
304-
SAMPLE1_REF.len() as _,
305-
9,
306-
)
307-
};
286+
let (err, dest) = unsafe { compress_c(SAMPLE1_REF.as_ptr(), SAMPLE1_REF.len() as _, 9) };
308287
assert_eq!(err, 0);
309-
dest.truncate(dest_len as usize);
310288

311289
assert_eq!(chunked.len(), dest.len());
312290
assert_eq!(chunked, dest);
@@ -317,20 +295,9 @@ fn compress_chunked_output() {
317295
fn fuzzer_short() {
318296
const INPUT: &[u8] = &[0, 0, 67, 0, 67, 0, 0, 5, 0, 0];
319297

320-
let mut dest = [0u8; 256];
321-
let mut len = dest.len() as u32;
322-
unsafe {
323-
compress_c(
324-
dest.as_mut_ptr(),
325-
&mut len,
326-
INPUT.as_ptr(),
327-
INPUT.len() as u32,
328-
1,
329-
);
330-
}
331-
332-
let input = &dest[..len as usize];
298+
let (err, input) = unsafe { compress_c(INPUT.as_ptr(), INPUT.len() as u32, 1) };
299+
assert_eq!(err, 0);
333300

334301
let mut dest_chunked = vec![0; 1 << 18];
335-
let _ = decompress_rs_chunked_input(&mut dest_chunked, input, 6).unwrap();
302+
let _ = decompress_rs_chunked_input(&mut dest_chunked, &input, 6).unwrap();
336303
}

0 commit comments

Comments
 (0)