xref: /aosp_15_r20/external/libultrahdr/docs/fuzzers.md (revision 89a0ef05262152531a00a15832a2d3b1e3990773)
1## Building fuzzers for libultrahdr
2
3### Requirements
4
5- Refer [Requirements](./building.md#Requirements)
6
7- Additionally compilers are required to support options `-fsanitize=fuzzer, -fsanitize=fuzzer-no-link`.
8  For instance, `clang 12` (or later)
9
10### Building Commands
11
12```sh
13cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1
14ninja
15```
16
17This will generate the following files under `build_directory`:
18
19**ultrahdr_enc_fuzzer** - ultrahdr encoder fuzzer <br>
20**ultrahdr_dec_fuzzer** - ultrahdr decoder fuzzer <br>
21
22Additionally, while building fuzzers, user can enable sanitizers by providing desired
23sanitizer option(s) through `UHDR_SANITIZE_OPTIONS`.
24
25To enable ASan,
26
27```sh
28cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=address
29ninja
30```
31
32To enable MSan,
33
34```sh
35cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=memory
36ninja
37```
38To enable TSan,
39
40```sh
41cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=thread
42ninja
43```
44
45To enable UBSan,
46
47```sh
48cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=undefined
49ninja
50```
51
52UBSan can be grouped with ASan, MSan or TSan.
53
54For example, to enable ASan and UBSan,
55
56```sh
57cmake -G Ninja ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=address,undefined
58ninja
59```
60
61### Running
62
63To run the fuzzer(s), first create a corpus directory that holds the initial
64"seed" sample inputs. For decoder fuzzer, ultrahdr jpeg images can be used and
65for encoder fuzzer, sample yuv files can be used.
66
67Then run the fuzzers on the corpus directory.
68
69```sh
70mkdir CORPUS_DIR
71cp seeds/* CORPUS_DIR
72./ultrahdr_dec_fuzzer CORPUS_DIR
73./ultrahdr_enc_fuzzer CORPUS_DIR
74```
75