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
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-03-14 14:27:04 +01:00
parent 7a30dfeb18
commit 52d4d1d339
4 changed files with 47 additions and 51 deletions

View File

@ -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
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'))
name = '@1@:@0@'.format(a, b)
if have
prev = ''
foreach p : fuzz_regression_tests
b = p.split('/')[-2]
c = p.split('/')[-1]
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
name = '@0@:@1@'.format(b, sanitizer)
if want_tests != 'false' and slow_tests
test(c, env, args : [exe.full_path(),
join_paths(meson.source_root(),
'test/fuzz-regressions',
p)])
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()

View File

@ -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()