mirror of
https://github.com/systemd/systemd
synced 2024-10-02 22:37:25 +00:00
fuzz: pass -Dc_args=/-Dcpp_args= to fuzzer targets
Prompted by #29972, because right now it's practically impossible to pass -fno-sanitize=function to the fuzzer targets without some extensive sed'ing. This splits both c_args and cpp_args to separate arguments for tools/meson-build.sh, because the other way would be to use `eval`, so the space-separated but quoted strings passed to these options are not split where they shouldn't, and I'd rather avoid using `eval` if possible. Also, this switches the positional arguments we pass to `meson setup`, as they were in incorrect order (docs say it should be buildir followed by sourcedir); meson is apparently clever enough to figure this out and switch the arguments around if necessary, so it didn't complain.
This commit is contained in:
parent
be0916f77c
commit
17ee59c9c9
|
@ -52,10 +52,11 @@ sanitize_address_undefined = custom_target(
|
||||||
project_source_root,
|
project_source_root,
|
||||||
'@OUTPUT@',
|
'@OUTPUT@',
|
||||||
'fuzzers',
|
'fuzzers',
|
||||||
'-Dfuzz-tests=true -Db_lundef=false -Db_sanitize=address,undefined --optimization=@0@ @1@ -Dc_args=@2@ -Dcpp_args=@2@ --auto-features=@3@'.format(
|
' '.join(get_option('c_args') + '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION'),
|
||||||
|
' '.join(get_option('cpp_args') + '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION'),
|
||||||
|
'-Dfuzz-tests=true -Db_lundef=false -Db_sanitize=address,undefined --optimization=@0@ @1@ --auto-features=@2@'.format(
|
||||||
get_option('optimization'),
|
get_option('optimization'),
|
||||||
get_option('werror') ? '--werror' : '',
|
get_option('werror') ? '--werror' : '',
|
||||||
'-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
|
|
||||||
sanitize_auto_features
|
sanitize_auto_features
|
||||||
),
|
),
|
||||||
' '.join(cc.cmd_array()),
|
' '.join(cc.cmd_array()),
|
||||||
|
|
|
@ -2,21 +2,20 @@
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
set -eux
|
set -eux
|
||||||
|
|
||||||
src="$1"
|
sourcedir="${1:?}"
|
||||||
dst="$2"
|
builddir="${2:?}"
|
||||||
target="$3"
|
target="${3:?}"
|
||||||
options="$4"
|
c_args="${4:?}"
|
||||||
CC="$5"
|
cpp_args="${5:?}"
|
||||||
CXX="$6"
|
options="${6:?}"
|
||||||
|
CC="${7:?}"
|
||||||
|
CXX="${8:?}"
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
if [ ! -f "$builddir/build.ninja" ]; then
|
||||||
[ -f "$dst/build.ninja" ] || CC="$CC" CXX="$CXX" meson setup "$src" "$dst" $options
|
# shellcheck disable=SC2086
|
||||||
|
CC="$CC" CXX="$CXX" meson setup -Dc_args="$c_args" -Dcpp_args="$cpp_args" "$builddir" "$sourcedir" $options
|
||||||
# Locate ninja binary, on CentOS 7 it is called ninja-build, so
|
|
||||||
# use that name if available.
|
|
||||||
ninja="ninja"
|
|
||||||
if command -v ninja-build >/dev/null ; then
|
|
||||||
ninja="ninja-build"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
"$ninja" -C "$dst" "$target"
|
# Locate ninja binary, on CentOS 7 it is called ninja-build, so use that name if available.
|
||||||
|
command -v ninja-build >/dev/null && ninja="ninja-build" || ninja="ninja"
|
||||||
|
"$ninja" -C "$builddir" "$target"
|
||||||
|
|
Loading…
Reference in a new issue