README.md
1## Building fuzzers for libultrahdr
2
3### Requirements
4
5- Refer [Requirements](../README.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 mkdir {build_directory}
13 cd {build_directory}
14 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DUHDR_BUILD_FUZZERS=1
15 make
16
17This will generate the following files under `build_directory`:
18
19**ultrahdr_enc_fuzzer**<br> ultrahdr encoder fuzzer
20
21**ultrahdr_dec_fuzzer**<br> ultrahdr decoder fuzzer
22
23Additionally, while building fuzzers, user can enable sanitizers by providing desired
24sanitizer option(s) through `UHDR_SANITIZE_OPTIONS`.
25
26To enable ASan,
27
28 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
29 -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=address
30 make
31
32To enable MSan,
33
34 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
35 -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=memory
36 make
37
38To enable TSan,
39
40 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
41 -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=thread
42 make
43
44To enable UBSan,
45
46 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
47 -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=undefined
48 make
49
50UBSan can be grouped with ASan, MSan or TSan.
51
52For example, to enable ASan and UBSan,
53
54 cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
55 -DUHDR_BUILD_FUZZERS=1 -DUHDR_SANITIZE_OPTIONS=address,undefined
56 make
57
58### Running
59
60To run the fuzzer(s), first create a corpus directory that holds the initial
61"seed" sample inputs. For decoder fuzzer, ultrahdr jpeg images can be used and
62for encoder fuzzer, sample yuv files can be used.
63
64Then run the fuzzers on the corpus directory.
65
66 mkdir CORPUS_DIR
67 cp seeds/* CORPUS_DIR
68 ./ultrahdr_dec_fuzzer CORPUS_DIR
69 ./ultrahdr_enc_fuzzer CORPUS_DIR
70