Skip to content

Commit

Permalink
Merge pull request #1224 from dtolnay/fuzz
Browse files Browse the repository at this point in the history
Add fuzz target for TokenBuffer and file parse
  • Loading branch information
dtolnay committed Sep 28, 2022
2 parents 96beb3b + f199b22 commit b74703d
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Expand Up @@ -108,6 +108,15 @@ jobs:
- run: cargo update -Z minimal-versions
- run: cargo check --all-features

fuzz:
name: Fuzz
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@nightly
- uses: dtolnay/install@cargo-fuzz
- run: cargo fuzz build -O

miri:
name: Miri
runs-on: ubuntu-latest
Expand Down Expand Up @@ -137,3 +146,4 @@ jobs:
- uses: actions/checkout@v3
- uses: dtolnay/install@cargo-outdated
- run: cargo outdated --workspace --exit-code 1
- run: cargo outdated --manifest-path fuzz/Cargo.toml --exit-code 1
3 changes: 3 additions & 0 deletions fuzz/.gitignore
@@ -0,0 +1,3 @@
artifacts/
corpus/
target/
28 changes: 28 additions & 0 deletions fuzz/Cargo.toml
@@ -0,0 +1,28 @@
[package]
name = "syn-fuzz"
version = "0.0.0"
authors = ["David Tolnay <dtolnay@gmail.com>"]
edition = "2021"
publish = false

[package.metadata]
cargo-fuzz = true

[dependencies]
libfuzzer-sys = "0.4"
proc-macro2 = "1"
syn = { path = "..", default-features = false, features = ["full", "parsing"] }

[[bin]]
name = "create_token_buffer"
path = "fuzz_targets/create_token_buffer.rs"
test = false
doc = false

[[bin]]
name = "parse_file"
path = "fuzz_targets/parse_file.rs"
test = false
doc = false

[workspace]
18 changes: 18 additions & 0 deletions fuzz/fuzz_targets/create_token_buffer.rs
@@ -0,0 +1,18 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use proc_macro2::Span;
use std::str;
use syn::parse::{ParseStream, Parser};

fn immediate_fail(_input: ParseStream) -> syn::Result<()> {
Err(syn::Error::new(Span::call_site(), ""))
}

fuzz_target!(|data: &[u8]| {
if data.len() < 300 {
if let Ok(string) = str::from_utf8(data) {
_ = immediate_fail.parse_str(string);
}
}
});
12 changes: 12 additions & 0 deletions fuzz/fuzz_targets/parse_file.rs
@@ -0,0 +1,12 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use std::str;

fuzz_target!(|data: &[u8]| {
if data.len() < 300 {
if let Ok(string) = str::from_utf8(data) {
_ = syn::parse_file(string);
}
}
});

0 comments on commit b74703d

Please sign in to comment.