unit
unit copied to clipboard
OSS-Fuzz: Moving the build upstream
Hi, summon @andrey-zelenkov
I'm the same guy who did the integration of unit into oss-fuzz;
Currently, I'm planning to shift the fuzzing harness files from the OSS-Fuzz repo to the unit repo;
oss-fuzz plan:
- Move fuzzer files with
build.shif possible like this; - Delete blot from the oss-fuzz repo;
- Add
CIFuzzworkflow; - Increase the coverage with a new fuzzer or by using the API properly.
Additional information
unit-fuzzing-pr.patch is my translation in the build system for integrating fuzz builds.
Note that I'm a little skeptical of make file patch. I need a little extra oversight from you on that.
unit-fuzzing-pr.patch
diff --git a/auto/help b/auto/help
index 8f7553f..2e866ac 100644
--- a/auto/help
+++ b/auto/help
@@ -54,6 +54,7 @@ cat << END
--debug enable debug logging
+ --fuzz=ENGINE enable fuzz testing
python OPTIONS configure Python module
run "./configure python --help" to see available options
diff --git a/auto/make b/auto/make
index 2788b9f..13829a5 100644
--- a/auto/make
+++ b/auto/make
@@ -158,7 +158,7 @@ END
# Object files.
-for nxt_src in $NXT_LIB_SRCS $NXT_TEST_SRCS $NXT_LIB_UNIT_SRCS \
+for nxt_src in $NXT_LIB_SRCS $NXT_TEST_SRCS $NXT_FUZZ_SRCS $NXT_LIB_UNIT_SRCS \
src/test/nxt_unit_app_test.c \
src/test/nxt_unit_websocket_chat.c \
src/test/nxt_unit_websocket_echo.c
@@ -324,6 +324,61 @@ END
fi
+if [ $NXT_FUZZ != NO ]; then
+
+ # Fuzz object files list.
+
+ $echo "NXT_FUZZ_OBJS = \\" >> $NXT_MAKEFILE
+
+ for nxt_src in $NXT_FUZZ_SRCS
+ do
+ nxt_obj=${nxt_src%.c}.o
+ $echo " $NXT_BUILD_DIR/$nxt_obj \\" >> $NXT_MAKEFILE
+ done
+
+ # Fuzz executables.
+
+ cat << END >> $NXT_MAKEFILE
+
+
+.PHONY: fuzz
+fuzz: $NXT_BUILD_DIR/fuzz_basic \\
+ $NXT_BUILD_DIR/fuzz_http_parse \\
+ $NXT_BUILD_DIR/fuzz_json
+
+$NXT_BUILD_DIR/fuzz_basic: \$(NXT_FUZZ_OBJS) \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC
+ \$(PP_LD) \$@
+ \$(v)\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/fuzz_basic \\
+ \$(CFLAGS) $NXT_BUILD_DIR/src/fuzz/nxt_basic_fuzz.o \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC \\
+ $NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS \\
+ $NXT_FUZZ
+
+$NXT_BUILD_DIR/fuzz_http_parse: \$(NXT_FUZZ_OBJS) \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC
+ \$(PP_LD) \$@
+ \$(v)\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/fuzz_http_parse \\
+ \$(CFLAGS) $NXT_BUILD_DIR/src/fuzz/nxt_http_parse_fuzz.o \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC \\
+ $NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS \\
+ $NXT_FUZZ
+
+$NXT_BUILD_DIR/fuzz_json: \$(NXT_FUZZ_OBJS) \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC
+ \$(PP_LD) \$@
+ \$(v)\$(NXT_EXEC_LINK) -o $NXT_BUILD_DIR/fuzz_json \\
+ \$(CFLAGS) $NXT_BUILD_DIR/src/fuzz/nxt_json_fuzz.o \\
+ $NXT_BUILD_DIR/lib/$NXT_LIB_STATIC \\
+ $NXT_LD_OPT $NXT_LIBM $NXT_LIBS $NXT_LIB_AUX_LIBS \\
+ $NXT_FUZZ
+
+END
+
+
+fi
+
+
NXT_MAKE_INCS="src $NXT_BUILD_DIR/include"
NXT_MAKE_SRCS="$NXT_SRCS"
diff --git a/auto/options b/auto/options
index 0550c69..a35d950 100644
--- a/auto/options
+++ b/auto/options
@@ -11,6 +11,8 @@ NXT_LD_OPT=
NXT_DEBUG=NO
+NXT_FUZZ=
+
NXT_INET6=YES
NXT_UNIX_DOMAIN=YES
@@ -98,6 +100,8 @@ do
--debug) NXT_DEBUG=YES ;;
+ --fuzz=*) NXT_FUZZ="$value" ;;
+
--no-ipv6) NXT_INET6=NO ;;
--no-unix-sockets) NXT_UNIX_DOMAIN=NO ;;
diff --git a/auto/sources b/auto/sources
index f34d7fd..5ac3caa 100644
--- a/auto/sources
+++ b/auto/sources
@@ -179,6 +179,11 @@ NXT_LIB_UTF8_FILE_NAME_TEST_SRCS=" \
src/test/nxt_utf8_file_name_test.c \
"
+NXT_FUZZ_SRCS=" \
+ src/fuzz/nxt_basic_fuzz.c \
+ src/fuzz/nxt_http_parse_fuzz.c \
+ src/fuzz/nxt_json_fuzz.c \
+"
if [ $NXT_HAVE_ROOTFS = YES ]; then
NXT_LIB_SRCS="$NXT_LIB_SRCS src/nxt_fs_mount.c"
diff --git a/auto/summary b/auto/summary
index dd7a60a..b6caee6 100644
--- a/auto/summary
+++ b/auto/summary
@@ -36,4 +36,6 @@ Unit configuration summary:
debug logging: ............. $NXT_DEBUG
+ fuzz engine: ............... "$NXT_FUZZ"
+
END
diff --git a/configure b/configure
index 2cb4d45..4b3a509 100755
--- a/configure
+++ b/configure
@@ -65,6 +65,7 @@ mkdir -p $NXT_BUILD_DIR/share/man/man8
mkdir -p $NXT_BUILD_DIR/share/pkgconfig
mkdir -p $NXT_BUILD_DIR/src
mkdir -p $NXT_BUILD_DIR/src/test
+mkdir -p $NXT_BUILD_DIR/src/fuzz
mkdir -p $NXT_BUILD_DIR/var/lib/unit
mkdir -p $NXT_BUILD_DIR/var/log/unit
mkdir -p $NXT_BUILD_DIR/var/run/unit