]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fuzz: pass -Dc_args=/-Dcpp_args= to fuzzer targets
authorFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 10 Nov 2023 15:38:01 +0000 (16:38 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 10 Nov 2023 17:22:08 +0000 (17:22 +0000)
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.

test/fuzz/meson.build
tools/meson-build.sh

index 45f777525c341edc7029063fb92d79e3afa6d08d..4b7d9236175ea79eebdcb974a4c554c53a16e69c 100644 (file)
@@ -52,10 +52,11 @@ sanitize_address_undefined = custom_target(
                    project_source_root,
                    '@OUTPUT@',
                    '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('werror') ? '--werror' : '',
-                           '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
                            sanitize_auto_features
                    ),
                    ' '.join(cc.cmd_array()),
index 2ef60cfa8e3e889a8b4279e66bf8a872ce072db6..311b778f0a9993ca7d7149f9f894bb75f5748242 100755 (executable)
@@ -2,21 +2,20 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 set -eux
 
-src="$1"
-dst="$2"
-target="$3"
-options="$4"
-CC="$5"
-CXX="$6"
+sourcedir="${1:?}"
+builddir="${2:?}"
+target="${3:?}"
+c_args="${4:?}"
+cpp_args="${5:?}"
+options="${6:?}"
+CC="${7:?}"
+CXX="${8:?}"
 
-# shellcheck disable=SC2086
-[ -f "$dst/build.ninja" ] || CC="$CC" CXX="$CXX" meson setup "$src" "$dst" $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"
+if [ ! -f "$builddir/build.ninja" ]; then
+    # shellcheck disable=SC2086
+    CC="$CC" CXX="$CXX" meson setup -Dc_args="$c_args" -Dcpp_args="$cpp_args" "$builddir" "$sourcedir" $options
 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"