Coverage Report

Created: 2024-06-18 07:39

/src/image-png/fuzz/fuzz_targets/decode.rs
Line
Count
Source
1
#![no_main]
2
#[macro_use] extern crate libfuzzer_sys;
3
extern crate png;
4
5
#[inline(always)]
6
7.32k
fn png_decode(data: &[u8]) -> Result<(Option<png::OutputInfo>, Vec<u8>), ()> {
7
7.32k
    let limits = png::Limits { bytes: 1 << 16 };
8
7.32k
    let decoder = png::Decoder::new_with_limits(data, limits);
9
7.32k
    let  mut reader = decoder.read_info().map_err(|_| ())?;
10
11
4.68k
    if reader.info().raw_bytes() > 5_000_000 {
12
74
        return Err(());
13
4.61k
    }
14
4.61k
15
4.61k
    let mut img_data = vec![0u8; reader.info().raw_bytes()];
16
4.61k
17
4.61k
    let mut last_info = None;
18
22.7k
    while let Ok(info) = reader.next_frame(&mut img_data) {
19
18.0k
        last_info = Some(info);
20
18.0k
    }
21
22
4.61k
    Ok((last_info, img_data))
23
7.32k
}
24
25
fuzz_target!(|data: &[u8]| {
26
    let _ = png_decode(&data);
27
});