# # Copyright (c) 2019-2024 Ruben Perez Hidalgo (rubenperez038 at gmail dot com) # # Distributed under the Boost Software License, Version 1.0. (See accompanying # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # import common ; import regex ; local all_fuzzers = [ regex.replace-list [ glob "fuzz_*.cpp" ] : ".cpp" : "" ] ; for local fuzzer in $(all_fuzzers) { # These two fuzzers are the most complex ones. The rest are really # simple, so less time is enough local fuzz_time = 10 ; if $(fuzzer) = "fuzz_row" || $(fuzzer) = "fuzz_text_field" { fuzz_time = 30 ; } # Create the output corpus directories make /tmp/corpus/$(fuzzer) : : common.MkDir ; make /tmp/mincorpus/$(fuzzer) : : common.MkDir ; # Build the fuzzer exe $(fuzzer) : /boost/mysql/test//boost_mysql $(fuzzer).cpp : requirements on speed on norecover -fsanitize=fuzzer -fsanitize=fuzzer ; # Make sure that any old crashes are run without problems local old_crashes = [ glob-tree-ex old_crashes/$(fuzzer) : * ] ; if $(old_crashes) { run $(fuzzer) : target-name $(fuzzer)-old-crashes : input-files [ SORT $(old_crashes) ] ; } # Run the fuzzer for a short while run $(fuzzer) : "/tmp/corpus/$(fuzzer) /tmp/seedcorpus/$(fuzzer) -max_total_time=$(fuzz_time)" : target-name $(fuzzer)-fuzzing : requirements /tmp/corpus/$(fuzzer) ; # Minimize the corpus run $(fuzzer) : "/tmp/mincorpus/$(fuzzer) /tmp/corpus/$(fuzzer) -merge=1" : target-name $(fuzzer)-minimize-corpus : requirements $(fuzzer)-fuzzing /tmp/corpus/$(fuzzer) /tmp/mincorpus/$(fuzzer) ; }