mirror of
https://github.com/systemd/systemd.git
synced 2025-01-09 01:18:19 +03:00
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:
parent
7a30dfeb18
commit
52d4d1d339
48
meson.build
48
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,25 +2643,28 @@ endforeach
|
||||
|
||||
############################################################
|
||||
|
||||
prev = ''
|
||||
foreach p : fuzz_regression_tests
|
||||
a = p.split('/')[-3]
|
||||
# Enable tests for all supported sanitizers
|
||||
foreach tuple : sanitizers
|
||||
sanitizer = tuple[0]
|
||||
build = tuple[1]
|
||||
|
||||
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 have
|
||||
prev = ''
|
||||
foreach p : fuzz_regression_tests
|
||||
b = p.split('/')[-2]
|
||||
c = p.split('/')[-1]
|
||||
|
||||
if a == 'address'
|
||||
build = sanitize_address
|
||||
else
|
||||
error('unknown sanitizer @0@'.format(a))
|
||||
endif
|
||||
|
||||
name = '@1@:@0@'.format(a, b)
|
||||
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 not sanitizers.contains(a)
|
||||
message('Not compiling @0@ because @1@ sanitizer is not available'.format(name, a))
|
||||
elif slow_tests
|
||||
exe = custom_target(
|
||||
name,
|
||||
@ -2692,13 +2681,18 @@ foreach p : fuzz_regression_tests
|
||||
prev = name
|
||||
|
||||
if want_tests != 'false' and slow_tests
|
||||
test(c, env, args : [exe.full_path(),
|
||||
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()
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user