Fix building ssml-fuzzer with libFuzzer.

This commit is contained in:
Reece H. Dunn
2018-03-19 21:50:08 +00:00
parent 39b8768a79
commit d5c52ab39f
3 changed files with 46 additions and 9 deletions
+12 -7
View File
@@ -261,19 +261,24 @@ check: tests/encoding.check \
##### fuzzer:
# When OSS-Fuzz [https://github.com/google/oss-fuzz] runs our fuzzer, it sets
# LIB_FUZZING_ENGINE to libFuzzer [http://llvm.org/docs/LibFuzzer.html].
# When running outside OSS-Fuzz, we link against our own stub fuzzrunner.
LIB_FUZZING_ENGINE ?= tests/libfuzzrunner.la
if !HAVE_LIBFUZZER
# libfuzzrunner is a stub implementation of libFuzzer that calls the
# LLVMFuzzerTestOneInput with the files passed to the fuzzer program.
lib_LTLIBRARIES += tests/libfuzzrunner.la
tests_libfuzzrunner_la_CFLAGS = -Isrc/libespeak-ng ${AM_CFLAGS}
tests_libfuzzrunner_la_SOURCES = tests/fuzzrunner.c
endif
noinst_bin_PROGRAMS += tests/ssml-fuzzer.test
tests_ssml_fuzzer_test_LDADD = src/libespeak-ng.la ${LIB_FUZZING_ENGINE}
tests_ssml_fuzzer_test_LDADD = src/libespeak-ng.la
tests_ssml_fuzzer_test_SOURCES = tests/ssml-fuzzer.c
tests_ssml_fuzzer_test_DEPENDENCIES = src/libespeak-ng.la tests/libfuzzrunner.la
if HAVE_LIBFUZZER
tests_ssml_fuzzer_test_CFLAGS = -fsanitize=fuzzer
tests_ssml_fuzzer_test_LDFLAGS = -fsanitize=fuzzer
else
tests_ssml_fuzzer_test_LDADD += tests/libfuzzrunner.la
endif
tests/ssml-fuzzer.check: tests/ssml-fuzzer.test
@echo " TEST $<"
+17 -2
View File
@@ -7,7 +7,8 @@
- [Dependencies](#dependencies)
- [Building](#building-1)
- [Cross Compilation](#cross-compilation)
- [Sanitizer](#sanitizer)
- [Sanitizer Flag Configuration](#sanitizer-flag-configuration)
- [LLVM Fuzzer Support](#llvm-fuzzer-support)
- [eSpeak NG Feature Configuration](#espeak-ng-feature-configuration)
- [Extended Dictionary Configuration](#extended-dictionary-configuration)
- [Testing](#testing)
@@ -177,7 +178,7 @@ built it locally you can perform the cross compilation using:
./configure --build=... --host=... --target=...
make -B src/espeak-ng src/speak-ng
#### Sanitizer
#### Sanitizer Flag Configuration
It is possible to build eSpeak NG with the gcc or clang sanitizer by passing
the appropriate `CFLAGS` and `LDFLAGS` options to `configure`. For example:
@@ -188,6 +189,20 @@ the appropriate `CFLAGS` and `LDFLAGS` options to `configure`. For example:
make
make check
__NOTE:__ The `-fsanitize=fuzzer` option does not work when using the above
configuration method. This is because `clang` will use the `libFuzzer` library
which defines its own `main` and requires `LLVMFuzzerTestOneInput` to be
defined. This breaks the autoconf check to see if the C compiler works.
#### LLVM Fuzzer Support
To enable libFuzzer support you need clang 6.0 or later. It is enabled with
the following:
CC=clang-6.0 ./configure --with-libfuzzer=yes
make
make check
#### eSpeak NG Feature Configuration
The following `configure` options control which eSpeak NG features are enabled:
+17
View File
@@ -86,6 +86,7 @@ fi
dnl ================================================================
dnl FreeBSD check.
dnl ================================================================
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#if ! defined(__FreeBSD__)
#error macro not defined
@@ -282,6 +283,22 @@ AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAG
AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"])
dnl ================================================================
dnl libFuzzer checks.
dnl ================================================================
AC_ARG_WITH([libfuzzer],
[AS_HELP_STRING([--with-libfuzzer], [enable libFuzzer in the fuzzer tests @<:@default=no@:>@])],
[])
if test "$with_libfuzzer" = "yes" ; then
have_libfuzzer=yes
else
have_libfuzzer=no
fi
AM_CONDITIONAL(HAVE_LIBFUZZER, [test x"$have_libfuzzer" = xyes])
dnl ================================================================
dnl Generate output.
dnl ================================================================