##// END OF EJS Templates
fuzz: use a more standard approach to allow local builds of fuzzers...
fuzz: use a more standard approach to allow local builds of fuzzers This is taken from the (improved since we started fuzzing) guide on ideal integrations. Rather than have our own wonky targets for building outside the fuzzer universe, we have a driver program we carry along and use when we're not using LibFuzzer. This will let us jettison a fair amount of goo. contrib/fuzz/standalone_fuzz_target_runner.cc is https://github.com/google/oss-fuzz/ file projects/example/my-api-repo/standalone from git revision c4579d9358a73ea5dbcc99cb985de1f2bf76dcf7, reformatted with out clang-format settings and a no-check-code comment added. It allows running a single test input through a fuzzer, rather than performing ongoing fuzzing as libfuzzer would. contrib/fuzz/FuzzedDataProvider.h is https://github.com/llvm/llvm-project/ file /compiler-rt/include/fuzzer/FuzzedDataProvider.h from git revision a44ef027ebca1598892ea9b104d6189aeb3bc2f0, reformatted with our clang-format settings and a no-check-code comment added. We can discard this if we instead want to add an hghave check for a new enough llvm that includes FuzzedDataProvder.h in the fuzzer headers. Differential Revision: https://phab.mercurial-scm.org/D7564
Augie Fackler -
r44265:5a9e2ae9 default
Show More
Name Size Modified Last Commit Author
/ contrib / fuzz
FuzzedDataProvider.h Loading ...
Makefile Loading ...
README.rst Loading ...
bdiff.cc Loading ...
dirs.cc Loading ...
dirstate.cc Loading ...
dirstate_corpus.py Loading ...
fm1readmarkers.cc Loading ...
fm1readmarkers_corpus.py Loading ...
fncache.cc Loading ...
fuzzutil.h Loading ...
jsonescapeu8fast.cc Loading ...
manifest.cc Loading ...
manifest_corpus.py Loading ...
mpatch.cc Loading ...
mpatch_corpus.py Loading ...
pyutil.cc Loading ...
pyutil.h Loading ...
revlog.cc Loading ...
revlog_corpus.py Loading ...
standalone_fuzz_target_runner.cc Loading ...
xdiff.cc Loading ...

How to add fuzzers (partially cribbed from oss-fuzz[0]):

  1. git clone https://github.com/google/oss-fuzz
  2. cd oss-fuzz
  3. python infra/helper.py build_image mercurial
  4. docker run --cap-add=SYS_PTRACE -it -v $HG_REPO_PATH:/hg-new
    gcr.io/oss-fuzz/mercurial bash
  5. cd /src
  6. rm -r mercurial
  7. ln -s /hg-new mercurial
  8. cd mercurial
  9. compile
  10. ls $OUT

Step 9 is literally running the command "compile", which is part of the docker container. Once you have that working, you can build the fuzzers like this (in the oss-fuzz repo):

python infra/helper.py build_fuzzers --sanitizer address mercurial $HG_REPO_PATH

(you can also say "memory", "undefined" or "coverage" for sanitizer). Then run the built fuzzers like this:

python infra/helper.py run_fuzzer mercurial -- $FUZZER

0: https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md