oss-fuzz/docs/glossary.md

86 lines
3.8 KiB
Markdown
Raw Normal View History

2016-11-21 23:01:14 +00:00
# OSS-Fuzz Glossary
2016-11-21 22:29:12 +00:00
2016-11-29 21:00:57 +00:00
Naming things is hard. This page tries to reduce confusion around fuzz-related terminologies.
2016-11-21 22:29:12 +00:00
2016-11-21 22:49:57 +00:00
## Fuzz Target
2016-11-29 21:00:57 +00:00
Or **Target Function** or **Fuzzing Target Function**, or **Fuzzing Entry Point**.<BR><BR>
A function to which we apply fuzzing. A [specific signature](http://libfuzzer.info#fuzz-target) is needed for OSS-Fuzz.
2016-11-21 22:37:27 +00:00
Examples: [openssl](https://github.com/openssl/openssl/blob/master/fuzz/x509.c),
2016-11-29 20:36:22 +00:00
[re2](https://github.com/google/re2/blob/master/re2/fuzzing/re2_fuzzer.cc),
[SQLite](https://www.sqlite.org/src/artifact/ad79e867fb504338).
2016-11-21 22:50:42 +00:00
2016-11-29 21:00:57 +00:00
A fuzz target can be used to [reproduce bug reports](reproducing.md).
2016-11-29 20:36:22 +00:00
It is recommended to use it for regression testing (see [ideal integration](ideal_integration.md)).
2016-11-21 22:29:58 +00:00
2016-11-29 20:36:22 +00:00
## Project
2016-11-21 23:16:58 +00:00
2016-11-29 20:54:20 +00:00
OSS-Fuzz applies fuzzing to [fuzz targets](#fuzz-target)
2016-11-21 23:16:58 +00:00
that test APIs of some specific opensource library
(or sometimes, internal functions of some application).
2016-11-29 21:00:57 +00:00
One project may have more than one [fuzz target](#fuzz-target)
2016-11-21 23:16:58 +00:00
(example: [openssl](https://github.com/openssl/openssl/blob/master/fuzz/)),
2016-11-29 21:00:57 +00:00
but OSS-Fuzz will have a single set of configuration files for such project.
2016-11-21 23:16:58 +00:00
2016-11-21 22:49:57 +00:00
## Fuzzing Engine
2016-11-22 00:29:42 +00:00
A tool that tries to find interesting inputs for a Fuzz Target by executing it.
2016-11-21 22:49:57 +00:00
Examples: [libFuzzer](http://lbfuzzer.info),
[AFL](lcamtuf.coredump.cx/afl/),
[honggfuzz](https://github.com/google/honggfuzz), etc
2016-11-21 22:58:26 +00:00
See also [Mutation Engine](#mutation-engine) and [Test Generator](#test-generator).
2016-11-21 22:49:57 +00:00
2016-11-22 02:07:12 +00:00
## Job type
2016-11-22 00:29:42 +00:00
2016-11-29 21:00:57 +00:00
Or **Fuzzer Build**.<BR><BR>
2016-11-22 02:21:09 +00:00
A [ClusterFuzz](clusterfuzz.md) specific term.
2016-11-29 20:54:20 +00:00
This refers to a build that contains all the [fuzz targets](#fuzz-target) for a given [project](#project)
with a specific [fuzzing engine](#fuzzing-engine), in a specific build mode (e.g. with enabled or disabled assertions),
and optionally combined with a [sanitizer](#sanitizer).
2016-11-22 00:29:42 +00:00
2016-11-29 20:54:20 +00:00
For example, we have a "libfuzzer_asan_sqlite" job type, indicating a build of all sqlite3 fuzz target using
[libFuzzer](http://lbfuzzer.info) and [ASan](http://clang.llvm.org/docs/AddressSanitizer.html).
2016-11-22 02:08:18 +00:00
2016-11-21 22:49:57 +00:00
## Test Input
2016-11-29 20:54:20 +00:00
A sequence of bytes that is used as the input to a [fuzz target](#fuzz-target).
Typicaly, a test input is stored in a seperate file.
2016-11-21 22:54:13 +00:00
2016-11-21 23:00:26 +00:00
## Reproducer
2016-11-29 21:00:57 +00:00
Or a **testcase**.<BR><BR>
A [test input](#test-input) that causes a specific bug to reproduce.
2016-11-21 23:00:26 +00:00
2016-11-21 22:54:13 +00:00
## Corpus
2016-11-29 21:00:57 +00:00
Or **test corpus**, or **fuzzing corpus**.<BR><BR>
2016-11-29 20:54:20 +00:00
A set of [test inputs](#test-input). In many context, it is also referred to a set of minimal test inputs that generates maximal code coverage.
2016-11-21 22:49:57 +00:00
## Mutation Engine
2016-11-29 20:54:20 +00:00
A tool that take a set of testcases as input and creates their mutated versions.
It does not feed the mutations to [fuzz target](#fuzz-target).
Example: [radamsa](https://github.com/aoh/radamsa) (a generic test mutator).
2016-11-21 22:49:57 +00:00
## Test Generator
2016-11-21 22:54:13 +00:00
A tool that generates testcases according to some rules or grammar.
2016-11-29 20:54:20 +00:00
Examples:
2016-11-29 21:00:57 +00:00
[csmith](https://embed.cs.utah.edu/csmith/) (a test generator for C language),
[cross_fuzz](http://lcamtuf.coredump.cx/cross_fuzz/) (a cross-document DOM binding test generator),
2016-11-21 22:49:57 +00:00
2016-11-29 20:54:20 +00:00
## [Sanitizer](https://github.com/google/sanitizers)
A [dynamic testing](https://en.wikipedia.org/wiki/Dynamic_testing) tool that can detect bugs during program execution.
Examples:
2016-11-22 00:29:42 +00:00
[ASan](http://clang.llvm.org/docs/AddressSanitizer.html),
2016-11-29 20:54:20 +00:00
[DFSan](http://clang.llvm.org/docs/DataFlowSanitizer.html),
[LSan](http://clang.llvm.org/docs/LeakSanitizer.html),
2016-11-22 00:29:42 +00:00
[MSan](http://clang.llvm.org/docs/MemorySanitizer.html),
[TSan](http://clang.llvm.org/docs/ThreadSanitizer.html),
[UBSan](http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html).
2016-11-21 22:49:57 +00:00
## Fuzzer
2016-11-29 20:54:20 +00:00
The most overloaded term and used in a variety of contexts, which makes it bad.
Sometimes, "Fuzzer" is referred to a [fuzz target](#fuzz-target),
2016-11-22 00:33:18 +00:00
sometimes to a [fuzzing engine](#fuzzing-engine),
2016-11-29 20:54:20 +00:00
a [mutation engine](#mutation-engine),
2016-11-29 21:00:57 +00:00
a [test generator](#test-generator) or
a [fuzzer build](#job-type).
2016-11-21 22:49:57 +00:00