Coverage Report

Created: 2025-12-31 07:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/fontations/fuzz/fuzz_targets/fuzz_skrifa_charmap.rs
Line
Count
Source
1
#![no_main]
2
use std::error::Error;
3
4
use libfuzzer_sys::fuzz_target;
5
use skrifa::{
6
    charmap::{Charmap, MappingIndex},
7
    MetadataProvider,
8
};
9
10
mod helpers;
11
12
use helpers::*;
13
14
const CJK_VARIATION_1: u32 = 0xFE00;
15
const CJK_VARIATION_2: u32 = 0xFE01;
16
17
5.45k
fn do_charmap_things(charmap: Charmap<'_>) {
18
5.45k
    let _ = charmap.has_map();
19
5.45k
    let _ = charmap.is_symbol();
20
5.45k
    let _ = charmap.has_variant_map();
21
22
131M
    for (cp, _) in charmap.mappings() {
23
131M
        let _ = charmap.map(cp);
24
131M
        let _ = charmap.map_variant(cp, CJK_VARIATION_1);
25
131M
        let _ = charmap.map_variant(cp, CJK_VARIATION_2);
26
131M
    }
27
5.45k
    let _ = charmap.variant_mappings().count();
28
5.45k
}
29
30
3.34k
fn do_skrifa_things(data: &[u8]) -> Result<(), Box<dyn Error>> {
31
3.34k
    let font = select_font(data)?;
32
    // we don't care about the result, just that we don't panic, hang, etc
33
2.72k
    do_charmap_things(font.charmap());
34
2.72k
    do_charmap_things(MappingIndex::new(&font).charmap(&font));
35
36
2.72k
    Ok(())
37
3.34k
}
38
39
fuzz_target!(|data: &[u8]| {
40
    let _ = do_skrifa_things(data);
41
});