mirror of
https://github.com/git/git.git
synced 2025-01-23 07:53:37 +08:00
Merge branch 'js/oss-fuzz-build-in-ci'
oss-fuzz tests are built and run in CI. * js/oss-fuzz-build-in-ci: ci: build and run minimal fuzzers in GitHub CI fuzz: fix fuzz test build rules
This commit is contained in:
commit
9869e02a64
11
.github/workflows/main.yml
vendored
11
.github/workflows/main.yml
vendored
@ -309,6 +309,17 @@ jobs:
|
||||
with:
|
||||
name: failed-tests-${{matrix.vector.jobname}}
|
||||
path: ${{env.FAILED_TEST_ARTIFACTS}}
|
||||
fuzz-smoke-test:
|
||||
name: fuzz smoke test
|
||||
needs: ci-config
|
||||
if: needs.ci-config.outputs.enabled == 'yes'
|
||||
env:
|
||||
CC: clang
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- run: ci/install-dependencies.sh
|
||||
- run: ci/run-build-and-minimal-fuzzers.sh
|
||||
dockerized:
|
||||
name: ${{matrix.vector.jobname}} (${{matrix.vector.image}})
|
||||
needs: ci-config
|
||||
|
17
Makefile
17
Makefile
@ -752,6 +752,10 @@ SCRIPTS = $(SCRIPT_SH_GEN) \
|
||||
|
||||
ETAGS_TARGET = TAGS
|
||||
|
||||
# If you add a new fuzzer, please also make sure to run it in
|
||||
# ci/run-build-and-minimal-fuzzers.sh so that we make sure it still links and
|
||||
# runs in the future.
|
||||
FUZZ_OBJS += oss-fuzz/dummy-cmd-main.o
|
||||
FUZZ_OBJS += oss-fuzz/fuzz-commit-graph.o
|
||||
FUZZ_OBJS += oss-fuzz/fuzz-date.o
|
||||
FUZZ_OBJS += oss-fuzz/fuzz-pack-headers.o
|
||||
@ -762,7 +766,7 @@ fuzz-objs: $(FUZZ_OBJS)
|
||||
# Always build fuzz objects even if not testing, to prevent bit-rot.
|
||||
all:: $(FUZZ_OBJS)
|
||||
|
||||
FUZZ_PROGRAMS += $(patsubst %.o,%,$(FUZZ_OBJS))
|
||||
FUZZ_PROGRAMS += $(patsubst %.o,%,$(filter-out %dummy-cmd-main.o,$(FUZZ_OBJS)))
|
||||
|
||||
# Empty...
|
||||
EXTRA_PROGRAMS =
|
||||
@ -3850,16 +3854,17 @@ cover_db_html: cover_db
|
||||
#
|
||||
# make CC=clang CXX=clang++ \
|
||||
# CFLAGS="-fsanitize=fuzzer-no-link,address" \
|
||||
# LIB_FUZZING_ENGINE="-fsanitize=fuzzer" \
|
||||
# LIB_FUZZING_ENGINE="-fsanitize=fuzzer,address" \
|
||||
# fuzz-all
|
||||
#
|
||||
FUZZ_CXXFLAGS ?= $(CFLAGS)
|
||||
FUZZ_CXXFLAGS ?= $(ALL_CFLAGS)
|
||||
|
||||
.PHONY: fuzz-all
|
||||
|
||||
$(FUZZ_PROGRAMS): all
|
||||
$(QUIET_LINK)$(CXX) $(FUZZ_CXXFLAGS) $(LIB_OBJS) $(BUILTIN_OBJS) \
|
||||
$(XDIFF_OBJS) $(EXTLIBS) git.o $@.o $(LIB_FUZZING_ENGINE) -o $@
|
||||
$(FUZZ_PROGRAMS): %: %.o oss-fuzz/dummy-cmd-main.o $(GITLIBS) GIT-LDFLAGS
|
||||
$(QUIET_LINK)$(CXX) $(FUZZ_CXXFLAGS) -o $@ $(ALL_LDFLAGS) \
|
||||
-Wl,--allow-multiple-definition \
|
||||
$(filter %.o,$^) $(filter %.a,$^) $(LIBS) $(LIB_FUZZING_ENGINE)
|
||||
|
||||
fuzz-all: $(FUZZ_PROGRAMS)
|
||||
|
||||
|
19
ci/run-build-and-minimal-fuzzers.sh
Executable file
19
ci/run-build-and-minimal-fuzzers.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Build and test Git's fuzzers
|
||||
#
|
||||
|
||||
. ${0%/*}/lib.sh
|
||||
|
||||
group "Build fuzzers" make \
|
||||
CC=clang \
|
||||
CXX=clang++ \
|
||||
CFLAGS="-fsanitize=fuzzer-no-link,address" \
|
||||
LIB_FUZZING_ENGINE="-fsanitize=fuzzer,address" \
|
||||
fuzz-all
|
||||
|
||||
for fuzzer in commit-graph date pack-headers pack-idx ; do
|
||||
begin_group "fuzz-$fuzzer"
|
||||
./oss-fuzz/fuzz-$fuzzer -verbosity=0 -runs=1 || exit 1
|
||||
end_group "fuzz-$fuzzer"
|
||||
done
|
14
oss-fuzz/dummy-cmd-main.c
Normal file
14
oss-fuzz/dummy-cmd-main.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include "git-compat-util.h"
|
||||
|
||||
/*
|
||||
* When linking the fuzzers, we link against common-main.o to pick up some
|
||||
* symbols. However, even though we ignore common-main:main(), we still need to
|
||||
* provide all the symbols it references. In the fuzzers' case, we need to
|
||||
* provide a dummy cmd_main() for the linker to be happy. It will never be
|
||||
* executed.
|
||||
*/
|
||||
|
||||
int cmd_main(int argc, const char **argv) {
|
||||
BUG("We should not execute cmd_main() from a fuzz target");
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user