Skip to content

Commit

Permalink
Fix oss-fuzz coverage build failure of dav1d
Browse files Browse the repository at this point in the history
The cc.symbols_have_underscore_prefix() test in dav1d/meson.build
returns the incorrect value (true) if -fprofile-instr-generate is
specified in the CFLAGS environment variable. This is apparently a bug
in Meson's symbols_have_underscore_prefix() function. See
mesonbuild/meson#5482. Work around this bug by
adding a special case for Linux in dav1d/meson.build.

Part 1 of the fix for https://crbug.com/oss-fuzz/38512. Part 2 of the
fix is to change oss-fuzz/projects/libavif/build.sh to run
"bash dav1d_oss_fuzz.sh" instead of "bash dav1d.cmd".
  • Loading branch information
wantehchang committed Sep 20, 2021
1 parent 1dea33e commit ef1025f
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
1 change: 1 addition & 0 deletions ext/dav1d.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
: # If you're running this on Windows, be sure you've already run this (from your VC2019 install dir):
: # "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"

# When updating the dav1d version, make the same change to dav1d_oss_fuzz.sh.
git clone -b 0.9.2 --depth 1 https://code.videolan.org/videolan/dav1d.git

cd dav1d
Expand Down
19 changes: 19 additions & 0 deletions ext/dav1d_oss_fuzz.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
diff --git a/meson.build b/meson.build
index a9cfa04..085653f 100644
--- a/meson.build
+++ b/meson.build
@@ -382,7 +382,13 @@ endif

cdata.set10('ARCH_PPC64LE', host_machine.cpu() == 'ppc64le')

-if cc.symbols_have_underscore_prefix()
+# Meson's symbols_have_underscore_prefix() function returns true incorrectly
+# if -fprofile-instr-generate is specified in CFLAGS. This is similar to the
+# problem symbols_have_underscore_prefix() has with -flto mentioned in
+# https://github.com/mesonbuild/meson/issues/5482. Since oss-fuzz uses
+# -fprofile-instr-generate in CFLAGS only on Linux, add a special case for
+# Linux to work around this Meson bug.
+if host_machine.system() != 'linux' and cc.symbols_have_underscore_prefix()
cdata.set10('PREFIX', true)
cdata_asm.set10('PREFIX', true)
endif
23 changes: 23 additions & 0 deletions ext/dav1d_oss_fuzz.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
: # If you want to use a local build of dav1d, you must clone the dav1d repo in this directory first, then enable CMake's AVIF_CODEC_DAV1D and AVIF_LOCAL_DAV1D options.
: # The git SHA below is known to work, and will occasionally be updated. Feel free to use a more recent commit.

: # The odd choice of comment style in this file is to try to share this script between *nix and win32.

: # meson and ninja must be in your PATH.

: # If you're running this on Windows, be sure you've already run this (from your VC2019 install dir):
: # "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"

git clone -b 0.9.2 --depth 1 https://code.videolan.org/videolan/dav1d.git

cd dav1d
patch -p1 < ../dav1d_oss_fuzz.patch
mkdir build
cd build

: # macOS might require: -Dc_args=-fno-stack-check
: # Build with asan: -Db_sanitize=address
: # Build with ubsan: -Db_sanitize=undefined
meson --default-library=static --buildtype release ..
ninja
cd ../..

0 comments on commit ef1025f

Please sign in to comment.