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