a5e4a67e8b
Change-Id: I1c68f2f6bc35d344c60a1898b68bf2ca79e54a9d
43 lines
2.2 KiB
Plaintext
43 lines
2.2 KiB
Plaintext
This directory contains tests to be run with clang's libFuzzer. It will generate data, pass this
|
|
data to the function
|
|
|
|
LLVMFuzzerTestOneInput(const char *Data, size_t Size)
|
|
|
|
of the test and track the code execution. Should the test crash, libFuzzer will provide you with the
|
|
data which triggered the crash. You can then use this to debug and fix the called code.
|
|
|
|
! Please note: The purpose of fuzz testing is to find unexpected code paths. Running fuzz tests may!
|
|
! result in unforeseen behavior, including loss of data. Consider running the tests in an isolated !
|
|
! environment, e.g. on a virtual machine. You have been warned. !
|
|
|
|
To run a test with libFuzzer:
|
|
|
|
1. Install clang 5.0 or later, e.g. from the repositories of the Linux distribution you are using.
|
|
Depending on the version of clang and the source you are installing from, you might have to
|
|
install libFuzzer for this version of clang explicitly.
|
|
2. Make sure clang and clang++ from this version of clang are found in PATH.
|
|
3. Configure Qt with
|
|
-platform linux-clang -sanitize fuzzer-no-link
|
|
or, if you are using clang 5
|
|
-platform linux-clang -coverage trace-pc-guard
|
|
to add the needed code coverage instrumentation. Since speed of execution is crucial for fuzz
|
|
testing, it's recommendable to also use the switches
|
|
-release -static
|
|
It might also make sense to add sanitizers by passing
|
|
-sanitize <...>
|
|
4. Build Qt.
|
|
5. Build one of the tests using this Qt build.
|
|
6. Execute the resulting executable.
|
|
Depending on the expected input format of the tested function, you will get results faster if
|
|
you:
|
|
* provide a set of interesting input data by passing the path of a directory which contains
|
|
these data, each in one file. You can find such data sets in the subdirectory
|
|
"fuzzing/testcases" of the qtqa repository.
|
|
* pass a so-called dictionary listing keywords of the input format using
|
|
-dict=<dictionary file>
|
|
A couple of such dictionaries are provided by AFL (http://lcamtuf.coredump.cx/afl/)
|
|
* tell libFuzzer to generate only ASCII data using
|
|
-only_ascii=1
|
|
|
|
For further info, see https://llvm.org/docs/LibFuzzer.html
|