This commit is contained in:
nora 2021-11-06 20:31:33 +01:00
parent 555aa21cc4
commit 141e8e09bf
7 changed files with 95 additions and 0 deletions

3
fuzz/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
target
corpus
artifacts

44
fuzz/Cargo.lock generated Normal file
View file

@ -0,0 +1,44 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "arbitrary"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "577b08a4acd7b99869f863c50011b01eb73424ccc798ecd996f2e24817adfca7"
[[package]]
name = "cc"
version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
[[package]]
name = "libfuzzer-sys"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36a9a84a6e8b55dfefb04235e55edb2b9a2a18488fcae777a6bdaa6f06f1deb3"
dependencies = [
"arbitrary",
"cc",
"once_cell",
]
[[package]]
name = "once_cell"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "script_lang"
version = "0.1.0"
[[package]]
name = "script_lang-fuzz"
version = "0.0.0"
dependencies = [
"libfuzzer-sys",
"script_lang",
]

31
fuzz/Cargo.toml Normal file
View file

@ -0,0 +1,31 @@
[package]
name = "script_lang-fuzz"
version = "0.0.0"
authors = ["Automatically generated"]
publish = false
edition = "2018"
[package.metadata]
cargo-fuzz = true
[dependencies]
libfuzzer-sys = "0.4"
[dependencies.script_lang]
path = ".."
# Prevent this from interfering with workspaces
[workspace]
members = ["."]
[[bin]]
name = "lex"
path = "fuzz_targets/lex.rs"
test = false
doc = false
[[bin]]
name = "lex_parse"
path = "fuzz_targets/lex_parse.rs"
test = false
doc = false

7
fuzz/fuzz_targets/lex.rs Normal file
View file

@ -0,0 +1,7 @@
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: String| {
let lexer = script_lang::Lexer::lex(&data);
let _tokens = lexer.collect::<Vec<_>>();
});

View file

@ -0,0 +1,6 @@
#![no_main]
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
// fuzzed code goes here
});

View file

@ -1,3 +1,5 @@
#![allow(dead_code)]
mod mem;
use crate::ast::Program;

View file

@ -4,6 +4,8 @@ mod errors;
mod lex;
mod parse;
pub use lex::*;
pub fn run_program(program: &str) {
let lexer = lex::Lexer::lex(program);
let (success, errors) = lexer.partition::<Vec<_>, _>(|result| result.is_ok());