Browse Source

Fix building ssml-fuzzer with libFuzzer.

master
Reece H. Dunn 7 years ago
parent
commit
d5c52ab39f
3 changed files with 46 additions and 9 deletions
  1. 12
    7
      Makefile.am
  2. 17
    2
      README.md
  3. 17
    0
      configure.ac

+ 12
- 7
Makefile.am 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
README.md 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
- 0
configure.ac 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 ================================================================

Loading…
Cancel
Save