test: add fuzzer

Signed-off-by: Chojan Shang <psiace@outlook.com>
This commit is contained in:
Chojan Shang 2021-06-03 14:00:16 +08:00
parent 35ef0eee38
commit 1e65984613
4 changed files with 67 additions and 0 deletions

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"

35
fuzz/README.md Normal file
View file

@ -0,0 +1,35 @@
# fuzz
## Installing `honggfuzz`
```
cargo install honggfuzz
```
Install [dependencies](https://github.com/rust-fuzz/honggfuzz-rs#dependencies) for your system.
## Fuzzing
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
```

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);
});
}
}