Merge pull request #312 from PsiACE/main

Add fuzzer based on honggfuzz
This commit is contained in:
Andrew Lamb 2021-08-23 05:59:45 -04:00 committed by GitHub
commit 2d04266a8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 0 deletions

38
docs/fuzzing.md Normal file
View file

@ -0,0 +1,38 @@
# Fuzzing
## Installing `honggfuzz`
```
cargo install honggfuzz
```
Install [dependencies](https://github.com/rust-fuzz/honggfuzz-rs#dependencies) for your system.
## Running the fuzzer
Running the fuzzer is as easy as running in the `fuzz` directory.
Choose a target:
These are `[[bin]]` entries in `Cargo.toml`.
List them with `cargo read-manifest | jq '.targets[].name'` from the `fuzz` directory.
Run the fuzzer:
```shell
cd fuzz
cargo hfuzz run <target>
```
After a panic is found, get a stack trace with:
```shell
cargo hfuzz run-debug <target> hfuzz_workspace/<target>/*.fuzz
```
For example, with the `fuzz_parse_sql` target:
```shell
cargo hfuzz run fuzz_parse_sql
cargo hfuzz run-debug fuzz_parse_sql hfuzz_workspace/fuzz_parse_sql/*.fuzz
```

3
fuzz/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
corpus
hfuzz_target
hfuzz_workspace

17
fuzz/Cargo.toml Normal file
View file

@ -0,0 +1,17 @@
[package]
name = "fuzz"
version = "0.1.0"
edition = "2018"
publish = false
[dependencies]
honggfuzz = "0.5.54"
sqlparser = { path = ".." }
# Prevent this from interfering with workspaces
[workspace]
members = ["."]
[[bin]]
name = "fuzz_parse_sql"
path = "fuzz_targets/fuzz_parse_sql.rs"

View file

@ -0,0 +1,12 @@
use honggfuzz::fuzz;
use sqlparser::dialect::GenericDialect;
use sqlparser::parser::Parser;
fn main() {
loop {
fuzz!(|data: String| {
let dialect = GenericDialect {};
let _ = Parser::parse_sql(&dialect, &data);
});
}
}