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