summaryrefslogtreecommitdiff
path: root/fuzz/run-clang.sh
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz/run-clang.sh')
-rwxr-xr-xfuzz/run-clang.sh62
1 files changed, 62 insertions, 0 deletions
diff --git a/fuzz/run-clang.sh b/fuzz/run-clang.sh
new file mode 100755
index 0000000000..12e4094b53
--- /dev/null
+++ b/fuzz/run-clang.sh
@@ -0,0 +1,62 @@
+#!/bin/bash -e
+#
+# Copyright(c) 2017 Tim Rühsen
+#
+# This file is part of GnuTLS
+#
+# GnuTLS is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GnuTLS is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with gnutls. If not, see <https://www.gnu.org/licenses/>.
+
+trap ctrl_c INT
+
+ctrl_c() {
+ ./${fuzzer} -merge=1 ${fuzzer}.in ${fuzzer}.new
+ rm -rf ${fuzzer}.new
+}
+
+if test -z "$1"; then
+ echo "Usage: $0 <fuzzer target>"
+ echo "Example: $0 gnutls_base64_decode_fuzzer"
+ exit 1
+fi
+
+if ! grep -q FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION Makefile; then
+ echo "The fuzzers haven't been built for fuzzing (maybe for regression testing !?)"
+ echo "Please built regarding README.md and try again."
+ exit 1
+fi
+
+fuzzer=$1
+workers=$(($(nproc) - 0))
+jobs=$workers
+
+clang-5.0 \
+ $CFLAGS -I/usr/local/include -I../lib/include -I.. \
+ ${fuzzer}.c -o ${fuzzer} \
+ -Wl,-Bstatic ../lib/.libs/libgnutls.a -lFuzzer \
+ -Wl,-Bdynamic -lnettle -lhogweed -lgmp -lp11-kit -ltasn1 -lidn2 -lunistring -lclang-5.0 -lstdc++
+
+if test -n "$BUILD_ONLY"; then
+ exit 0
+fi
+
+# create directory for NEW test corpora (covering new areas of code)
+mkdir -p ${fuzzer}.new
+
+if test -f ${fuzzer}.dict; then
+ $sudo ./${fuzzer} -dict=${fuzzer}.dict ${fuzzer}.new ${fuzzer}.in -jobs=$jobs -workers=$workers
+else
+ $sudo ./${fuzzer} ${fuzzer}.new ${fuzzer}.in -jobs=$jobs -workers=$workers
+fi
+
+exit 0