/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 | | }); |