unit icon indicating copy to clipboard operation
unit copied to clipboard

OSS-Fuzz: Moving the build upstream

Open pkillarjun opened this issue 1 year ago • 0 comments

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.sh if possible like this;
  • Delete blot from the oss-fuzz repo;
  • Add CIFuzz workflow;
  • 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

pkillarjun avatar May 20 '24 15:05 pkillarjun