[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 118/256: ossfuzz: Move to C++ for curl_fuzzer.
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 118/256: ossfuzz: Move to C++ for curl_fuzzer. |
Date: |
Fri, 06 Oct 2017 19:43:29 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnurl.
commit 57001ce3bb97455d799f0a2180b7bf1287ffd71a
Author: Max Dymond <address@hidden>
AuthorDate: Fri Sep 1 21:48:41 2017 +0100
ossfuzz: Move to C++ for curl_fuzzer.
Automake gets confused if you want to use C++ static libraries with C
code - basically we need to involve the clang++ linker. The easiest way
of achieving this is to rename the C code as C++ code. This gets us a
bit further along the path and ought to be compatible with Google's
version of clang.
---
.gitignore | 1 +
.travis.yml | 5 +++++
configure.ac | 1 +
tests/fuzz/Makefile.am | 12 ++++++------
tests/fuzz/Makefile.inc | 10 +++++-----
tests/fuzz/README | 2 ++
tests/fuzz/{curl_fuzzer.c => curl_fuzzer.cc} | 9 ++++++---
tests/fuzz/curl_fuzzer.h | 2 +-
...fuzz_target_runner.c => standalone_fuzz_target_runner.cc} | 2 +-
tests/fuzz/{standalone_fuzz_target_runner.h => testinput.h} | 2 +-
10 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/.gitignore b/.gitignore
index 38c414e0f..e567b38c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,3 +55,4 @@ test-driver
scripts/_curl
curl_fuzzer
curl_fuzzer_seed_corpus.zip
+libstandaloneengine.a
diff --git a/.travis.yml b/.travis.yml
index cd8876e86..ca5ea8eba 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -145,7 +145,12 @@ script:
- |
if [ "$T" = "fuzzer" ]; then
export CC=clang
+ export CXX=clang++
export CFLAGS="-fsanitize=address"
+
+ # Specifically use libstdc++ for travis as libc++ is not installed.
+ # This is ok because we're not compiling against libFuzzer.
+ export CXXFLAGS="-fsanitize=address -stdlib=libstdc++"
./configure --disable-shared --enable-debug --enable-maintainer-mode
make
cd tests/fuzz
diff --git a/configure.ac b/configure.ac
index 04d92d8f4..27d560f83 100755
--- a/configure.ac
+++ b/configure.ac
@@ -52,6 +52,7 @@ CURL_CHECK_OPTION_RT
XC_CHECK_PATH_SEPARATOR
AX_CODE_COVERAGE
+AC_PROG_CXX
#
# save the configure arguments
diff --git a/tests/fuzz/Makefile.am b/tests/fuzz/Makefile.am
index 270b9783e..b7968d3d4 100644
--- a/tests/fuzz/Makefile.am
+++ b/tests/fuzz/Makefile.am
@@ -30,12 +30,12 @@ AUTOMAKE_OPTIONS = foreign nostdinc
# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
# $(top_srcdir)/lib for libcurl's lib/curl_setup.h and other "borrowed" files
-AM_CFLAGS = -I$(top_srcdir)/include \
- -I$(top_builddir)/lib \
- -I$(top_srcdir)/lib \
- -I$(top_srcdir)/tests/fuzz
+AM_CXXFLAGS = -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/tests/fuzz
-LIBS = -lpthread -lstdc++ -lm
+LIBS = -lpthread -lm
# Run e.g. "make all LIB_FUZZING_ENGINE=/path/to/libFuzzer.a"
# to link the fuzzer(s) against a real fuzzing engine.
@@ -53,4 +53,4 @@ checksrc:
@PERL@ $(top_srcdir)/lib/checksrc.pl $(srcdir)/*.c
noinst_PROGRAMS = $(FUZZPROGS)
-noinst_LIBRARIES = $(FUZZLIBS)
\ No newline at end of file
+noinst_LIBRARIES = $(FUZZLIBS)
diff --git a/tests/fuzz/Makefile.inc b/tests/fuzz/Makefile.inc
index 4d475374b..f52adb89c 100644
--- a/tests/fuzz/Makefile.inc
+++ b/tests/fuzz/Makefile.inc
@@ -1,15 +1,15 @@
FUZZPROGS = curl_fuzzer
FUZZLIBS = libstandaloneengine.a
-curl_fuzzer_SOURCES = curl_fuzzer.c
-curl_fuzzer_CFLAGS = $(AM_CFLAGS)
+curl_fuzzer_SOURCES = curl_fuzzer.cc
+curl_fuzzer_CXXFLAGS = $(AM_CXXFLAGS)
-libstandaloneengine_a_SOURCES = standalone_fuzz_target_runner.c
-libstandaloneengine_a_CFLAGS = $(AM_CFLAGS)
+libstandaloneengine_a_SOURCES = standalone_fuzz_target_runner.cc
+libstandaloneengine_a_CXXFLAGS = $(AM_CXXFLAGS)
# Some more targets.
zip:
zip -q -r curl_fuzzer_seed_corpus.zip curl_fuzz_data
check: all
- ./curl_fuzzer curl_fuzz_data/*
\ No newline at end of file
+ ./curl_fuzzer curl_fuzz_data/*
diff --git a/tests/fuzz/README b/tests/fuzz/README
index cdb69fe82..8b5fcd011 100644
--- a/tests/fuzz/README
+++ b/tests/fuzz/README
@@ -8,7 +8,9 @@ Building the fuzz target
From the CURL root directory:
export CC=clang-5.0
+export CXX=clang++-5.0
export CFLAGS="-fsanitize=address -fsanitize-address-use-after-scope
-fsanitize-coverage=trace-pc-guard,trace-cmp"
+export CXXFLAGS="-fsanitize=address -fsanitize-address-use-after-scope
-fsanitize-coverage=trace-pc-guard,trace-cmp -stdlib=libc++"
./configure --disable-shared --enable-debug --enable-maintainer-mode
make -sj
diff --git a/tests/fuzz/curl_fuzzer.c b/tests/fuzz/curl_fuzzer.cc
similarity index 96%
rename from tests/fuzz/curl_fuzzer.c
rename to tests/fuzz/curl_fuzzer.cc
index f4a4ec6f9..92bedf92e 100644
--- a/tests/fuzz/curl_fuzzer.c
+++ b/tests/fuzz/curl_fuzzer.cc
@@ -32,15 +32,18 @@
* Fuzzing entry point. This function is passed a buffer containing a test
* case. This test case should drive the CURL API into making a request.
*/
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
int rc = 0;
int tlv_rc;
FUZZ_DATA fuzz;
TLV tlv;
+ /* Have to set all fields to zero before getting to the terminate function */
+ memset(&fuzz, 0, sizeof(FUZZ_DATA));
+
if(size < sizeof(TLV_RAW)) {
- /* Not enough data */
+ /* Not enough data for a single TLV - don't continue */
goto EXIT_LABEL;
}
@@ -329,7 +332,7 @@ char *fuzz_tlv_to_string(TLV *tlv)
char *tlvstr;
/* Allocate enough space, plus a null terminator */
- tlvstr = malloc(tlv->length + 1);
+ tlvstr = (char *)malloc(tlv->length + 1);
if(tlvstr != NULL) {
memcpy(tlvstr, tlv->value, tlv->length);
diff --git a/tests/fuzz/curl_fuzzer.h b/tests/fuzz/curl_fuzzer.h
index a0c9d596a..634160648 100644
--- a/tests/fuzz/curl_fuzzer.h
+++ b/tests/fuzz/curl_fuzzer.h
@@ -21,6 +21,7 @@
***************************************************************************/
#include <curl/curl.h>
+#include <testinput.h>
/**
* TLV types.
@@ -107,7 +108,6 @@ typedef struct fuzz_data
} FUZZ_DATA;
/* Function prototypes */
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
uint32_t to_u32(uint8_t b[4]);
uint16_t to_u16(uint8_t b[2]);
int fuzz_initialize_fuzz_data(FUZZ_DATA *fuzz,
diff --git a/tests/fuzz/standalone_fuzz_target_runner.c
b/tests/fuzz/standalone_fuzz_target_runner.cc
similarity index 98%
rename from tests/fuzz/standalone_fuzz_target_runner.c
rename to tests/fuzz/standalone_fuzz_target_runner.cc
index c131a2192..9b2316ed6 100644
--- a/tests/fuzz/standalone_fuzz_target_runner.c
+++ b/tests/fuzz/standalone_fuzz_target_runner.cc
@@ -24,7 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include "standalone_fuzz_target_runner.h"
+#include "testinput.h"
/**
* Main procedure for standalone fuzzing engine.
diff --git a/tests/fuzz/standalone_fuzz_target_runner.h b/tests/fuzz/testinput.h
similarity index 93%
rename from tests/fuzz/standalone_fuzz_target_runner.h
rename to tests/fuzz/testinput.h
index 37302618b..0746cba73 100644
--- a/tests/fuzz/standalone_fuzz_target_runner.h
+++ b/tests/fuzz/testinput.h
@@ -20,4 +20,4 @@
*
***************************************************************************/
-int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
\ No newline at end of file
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] 123/256: runtests.pl: allow <file[1-4]> tags in client section., (continued)
- [GNUnet-SVN] [gnurl] 123/256: runtests.pl: allow <file[1-4]> tags in client section., gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 95/256: asyn-thread: Set errno to the proper value ENOMEM in OOM situation, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 114/256: strcase: corrected comment header for Curl_strcasecompare(), gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 151/256: openssl: use OpenSSL's default ciphers by default, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 156/256: runtests.pl: support attribute "nonewline" in part verify/upload., gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 66/256: vtls: declare Curl_ssl structs for every SSL backend, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 36/256: scripts/contri*sh: use "git log --use-mailmap", gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 141/256: test1135: fixed after bd8070085f9, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 70/256: vtls: convert the have_curlssl_* constants to runtime flags, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 104/256: curl_global_sslset.3: clarify, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 118/256: ossfuzz: Move to C++ for curl_fuzzer.,
gnunet <=
- [GNUnet-SVN] [gnurl] 129/256: mime: fix some implicit curl_off_t --> size_t conversion warnings., gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 106/256: makefile.m32: add multissl support, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 85/256: vtls: refactor out essential information about the SSL backends, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 148/256: configure: add MultiSSL to FEATURES when enabled, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 211/256: RELEASE-NOTES: synced with 5fe85587c, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 99/256: asyn-thread: Fixed cleanup after OOM, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 109/256: polarssl: fix multissl breakage, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 84/256: vtls: allow selecting which SSL backend to use at runtime, gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 125/256: test564: Add a warning comment about shell profile output., gnunet, 2017/10/06
- [GNUnet-SVN] [gnurl] 179/256: mbedtls: enable CA path processing, gnunet, 2017/10/06