nginx / unit

NGINX Unit - universal web app server - a lightweight and versatile open source server that simplifies the application stack by natively executing application code across eight different programming language runtimes.
https://unit.nginx.org
Apache License 2.0
5.25k stars 320 forks source link

OSS-Fuzz: Moving the build upstream #1275

Closed pkillarjun closed 1 month ago

pkillarjun commented 1 month ago

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:

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
andrey-zelenkov commented 1 month ago

Hi @pkillarjun,

I don't mind including the necessary changes into this repo. Feel free to submit a PR, and we will see how the review goes.