Skip to content
This repository has been archived by the owner on Nov 14, 2022. It is now read-only.

Commit

Permalink
Merge pull request apache#312 from PsiACE/main
Browse files Browse the repository at this point in the history
Add fuzzer based on honggfuzz
  • Loading branch information
alamb authored Aug 23, 2021
2 parents 5bc109a + a12dd0e commit 2d04266
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 0 deletions.
38 changes: 38 additions & 0 deletions docs/fuzzing.md
Original file line number Diff line number Diff line change
@@ -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 changes: 3 additions & 0 deletions fuzz/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
corpus
hfuzz_target
hfuzz_workspace
17 changes: 17 additions & 0 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
12 changes: 12 additions & 0 deletions fuzz/fuzz_targets/fuzz_parse_sql.rs
Original file line number Diff line number Diff line change
@@ -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);
});
}
}

0 comments on commit 2d04266

Please sign in to comment.