From: Zbigniew Jędrzejewski-Szmek Date: Wed, 14 Mar 2018 13:27:04 +0000 (+0100) Subject: test: run all fuzz regression tests with all sanitizers X-Git-Tag: v239~548^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=52d4d1d339c405818c80960f981ede337785c0da;p=thirdparty%2Fsystemd.git test: run all fuzz regression tests with all sanitizers We currently have just one sanitizer for tests, asan, but we may add more in the future. So let's keep the loop over the sanitizers in meson.build, but just enable all regression cases under all sanitizers. If it fails under one of them, it might fail under a different one. In subsequent commits I'll add test cases which might not fail under asan, but it's good to commit them for future use. The test names are made more verbose: 256/257 fuzz-dns-packet:oss-fuzz-5465:address OK 0.04 s 257/257 fuzz-dns-packet:issue-7888:address OK 0.03 s --- diff --git a/meson.build b/meson.build index 56e3d0086e0..36869ff0466 100644 --- a/meson.build +++ b/meson.build @@ -412,20 +412,6 @@ foreach arg : ['-Wl,-z,relro', endif endforeach -# Check if various sanitizers are supported -sanitizers = [] -foreach arg : ['address'] - - have = run_command(check_compilation_sh, - cc.cmd_array(), '-x', 'c', - '-fsanitize=@0@'.format(arg), - '-include', link_test_c).returncode() == 0 - message('@0@ sanitizer supported: @1@'.format(arg, have ? 'yes' : 'no')) - if have - sanitizers += arg - endif -endforeach - if get_option('buildtype') != 'debug' foreach arg : ['-ffunction-sections', '-fdata-sections'] @@ -2657,48 +2643,56 @@ endforeach ############################################################ -prev = '' -foreach p : fuzz_regression_tests - a = p.split('/')[-3] - b = p.split('/')[-2] - c = p.split('/')[-1] +# Enable tests for all supported sanitizers +foreach tuple : sanitizers + sanitizer = tuple[0] + build = tuple[1] - if a == 'address' - build = sanitize_address - else - error('unknown sanitizer @0@'.format(a)) - endif - - name = '@1@:@0@'.format(a, b) - - if name != prev - if want_tests == 'false' - message('Not compiling @0@ because tests is set to false'.format(name)) - elif not sanitizers.contains(a) - message('Not compiling @0@ because @1@ sanitizer is not available'.format(name, a)) - elif slow_tests - exe = custom_target( - name, - output : name, - depends : build, - command : [env, 'ln', '-fs', - join_paths(build.full_path(), b), - '@OUTPUT@'], - build_by_default : true) - else - message('Not compiling @0@ because slow-tests is set to false'.format(name)) - endif - endif - prev = name + have = run_command(check_compilation_sh, + cc.cmd_array(), '-x', 'c', + '-fsanitize=@0@'.format(sanitizer), + '-include', link_test_c).returncode() == 0 + message('@0@ sanitizer supported: @1@'.format(sanitizer, have ? 'yes' : 'no')) - if want_tests != 'false' and slow_tests - test(c, env, args : [exe.full_path(), - join_paths(meson.source_root(), - 'test/fuzz-regressions', - p)]) + if have + prev = '' + foreach p : fuzz_regression_tests + b = p.split('/')[-2] + c = p.split('/')[-1] + + name = '@0@:@1@'.format(b, sanitizer) + + if name != prev + if want_tests == 'false' + message('Not compiling @0@ because tests is set to false'.format(name)) + elif slow_tests + exe = custom_target( + name, + output : name, + depends : build, + command : [env, 'ln', '-fs', + join_paths(build.full_path(), b), + '@OUTPUT@'], + build_by_default : true) + else + message('Not compiling @0@ because slow-tests is set to false'.format(name)) + endif + endif + prev = name + + if want_tests != 'false' and slow_tests + test('@0@:@1@:@2@'.format(b, c, sanitizer), + env, + args : [exe.full_path(), + join_paths(meson.source_root(), + 'test/fuzz-regressions', + p)]) + endif + endforeach endif endforeach + ############################################################ if git.found() diff --git a/test/fuzz-regressions/address/fuzz-dns-packet/issue-7888 b/test/fuzz-regressions/fuzz-dns-packet/issue-7888 similarity index 100% rename from test/fuzz-regressions/address/fuzz-dns-packet/issue-7888 rename to test/fuzz-regressions/fuzz-dns-packet/issue-7888 diff --git a/test/fuzz-regressions/address/fuzz-dns-packet/oss-fuzz-5465 b/test/fuzz-regressions/fuzz-dns-packet/oss-fuzz-5465 similarity index 100% rename from test/fuzz-regressions/address/fuzz-dns-packet/oss-fuzz-5465 rename to test/fuzz-regressions/fuzz-dns-packet/oss-fuzz-5465 diff --git a/test/fuzz-regressions/meson.build b/test/fuzz-regressions/meson.build index de69c941ea9..25ec51148b1 100644 --- a/test/fuzz-regressions/meson.build +++ b/test/fuzz-regressions/meson.build @@ -24,7 +24,9 @@ sanitize_address = custom_target( 'fuzzers', '-Db_lundef=false -Db_sanitize=address']) +sanitizers = [['address', sanitize_address]] + fuzz_regression_tests = ''' - address/fuzz-dns-packet/oss-fuzz-5465 - address/fuzz-dns-packet/issue-7888 + fuzz-dns-packet/oss-fuzz-5465 + fuzz-dns-packet/issue-7888 '''.split()