fmt/test/fuzzing
Paul Dreik d98bf8776b reorder cases to improve throughput
mutating the first byte of the input now always results in picking
on of the two paths. Before, two of the four possible outcomes resulted
in doit() not being invoked.
2021-08-29 15:02:00 +02:00
..
.gitignore add oss-fuzz support 2019-06-30 06:10:07 -07:00
build.sh set clang in one place 2021-08-22 17:52:45 -07:00
chrono-duration.cc clang format 2021-08-22 17:52:45 -07:00
chrono-timepoint.cc reorder cases to improve throughput 2021-08-29 15:02:00 +02:00
CMakeLists.txt add fuzzers for chrono timepoint and localtime,gmtime 2021-08-29 15:02:00 +02:00
float.cc clang format 2021-08-22 17:52:45 -07:00
fuzzer-common.h fix UB in fuzzer common (memcpy on nullptr) 2021-08-22 17:52:45 -07:00
main.cc Cleanup fuzzing 2020-10-13 09:08:04 -07:00
named-arg.cc clang format 2021-08-22 17:52:45 -07:00
one-arg.cc clang format 2021-08-22 17:52:45 -07:00
README.md Cleanup 2020-10-11 10:13:42 -07:00
timefunc-localtime.cc add fuzzers for chrono timepoint and localtime,gmtime 2021-08-29 15:02:00 +02:00
two-args.cc clang format 2021-08-22 17:52:45 -07:00

Running the fuzzers locally

There is a helper script to build the fuzzers, which has only been tested on Debian and Ubuntu linux so far. There should be no problems fuzzing on Windows (using clang>=8) or on Mac, but the script will probably not work out of the box.

Something along

mkdir build
cd build
export CXX=clang++
export CXXFLAGS="-fsanitize=fuzzer-no-link -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION= -g"
cmake .. -DFMT_SAFE_DURATION_CAST=On -DFMT_FUZZ=On -DFMT_FUZZ_LINKMAIN=Off -DFMT_FUZZ_LDFLAGS="-fsanitize=fuzzer"
cmake --build .

should work to build the fuzzers for all platforms which clang supports.

Execute a fuzzer with for instance

cd build
export UBSAN_OPTIONS=halt_on_error=1
mkdir out_chrono
bin/fuzzer_chrono_duration out_chrono