Mercurial > public > mercurial-scm > hg-stable
annotate tests/test-fuzz-targets.t @ 43833:19da643dc10c
tests: finally fix up test-fuzz-targets.t
It's been failing on my workstation for a while, since I have a new enough
LLVM that I had the fuzzer goo, but not so new that I actually had
FuzzedDataProvider. This is a better solution all around in my opinion.
I _believe_ this should let us run these tests on most systems, even
those using GCC instead of clang. That said, my one attempt to test
this on my macOS laptop failed miserably, and I don't feel like doing
more work on this right now.
Differential Revision: https://phab.mercurial-scm.org/D7566
author | Augie Fackler <augie@google.com> |
---|---|
date | Fri, 06 Dec 2019 15:08:37 -0500 |
parents | 39cab871e880 |
children | b918494198f7 |
rev | line source |
---|---|
38248
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
1 #require test-repo |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
2 |
35670
2b9e2415f5b5
contrib: add some basic scaffolding for some fuzz test targets
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 $ cd $TESTDIR/../contrib/fuzz |
43833
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
4 $ OUT=$TESTTMP ; export OUT |
38248
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
5 |
40447
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
6 which(1) could exit nonzero, but that's fine because we'll still end |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
7 up without a valid executable, so we don't need to check $? here. |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
8 |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
9 $ if which gmake >/dev/null 2>&1; then |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
10 > MAKE=gmake |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
11 > else |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
12 > MAKE=make |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
13 > fi |
6c01fad8de32
tests: sniff for /usr/local/bin/gmake and use it in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
38258
diff
changeset
|
14 |
40448
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
15 $ havefuzz() { |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
16 > cat > $TESTTMP/dummy.cc <<EOF |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
17 > #include <stdlib.h> |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
18 > #include <stdint.h> |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
19 > int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
20 > int main(int argc, char **argv) { |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
21 > const char data[] = "asdf"; |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
22 > return LLVMFuzzerTestOneInput((const uint8_t *)data, 4); |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
23 > } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
24 > EOF |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
25 > $CXX $TESTTMP/dummy.cc -o $TESTTMP/dummy \ |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
26 > -fsanitize=fuzzer-no-link,address || return 1 |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
27 > } |
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
28 |
38248
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
29 #if clang-libfuzzer |
40448
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
30 $ CXX=clang++ havefuzz || exit 80 |
43833
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
31 $ $MAKE -s clean all PYTHON_CONFIG=`which python-config` |
38248
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
32 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
33 #if no-clang-libfuzzer clang-6.0 |
40448
d9fc51f77cc5
tests: sniff for libfuzzer actually being available in test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40447
diff
changeset
|
34 $ CXX=clang++-6.0 havefuzz || exit 80 |
43833
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
35 $ $MAKE -s clean all CC=clang-6.0 CXX=clang++-6.0 PYTHON_CONFIG=`which python-config` |
38248
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
36 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
37 #if no-clang-libfuzzer no-clang-6.0 |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
38 $ exit 80 |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
39 #endif |
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38247
diff
changeset
|
40 |
43833
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
41 $ cd $TESTTMP |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
42 |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
43 Run each fuzzer using dummy.cc as a fake input, to make sure it runs |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
44 at all. In the future we should instead unpack the corpus for each |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
45 fuzzer and use that instead. |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
46 |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
47 $ for fuzzer in `ls *_fuzzer | sort` ; do |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
48 > echo run $fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
49 > ./$fuzzer dummy.cc > /dev/null 2>&1 |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
50 > done |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
51 run bdiff_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
52 run dirs_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
53 run dirstate_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
54 run fm1readmarkers_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
55 run fncache_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
56 run jsonescapeu8fast_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
57 run manifest_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
58 run mpatch_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
59 run revlog_fuzzer... |
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
60 run xdiff_fuzzer... |
42952
39cab871e880
tests: clean up built binaries after running test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40448
diff
changeset
|
61 |
39cab871e880
tests: clean up built binaries after running test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40448
diff
changeset
|
62 Clean up. |
43833
19da643dc10c
tests: finally fix up test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
42952
diff
changeset
|
63 $ cd $TESTDIR/../contrib/fuzz |
42952
39cab871e880
tests: clean up built binaries after running test-fuzz-targets.t
Augie Fackler <augie@google.com>
parents:
40448
diff
changeset
|
64 $ $MAKE -s clean |