diff --git a/fuzz/.gitignore b/fuzz/.gitignore new file mode 100644 index 0000000..a092511 --- /dev/null +++ b/fuzz/.gitignore @@ -0,0 +1,3 @@ +target +corpus +artifacts diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock new file mode 100644 index 0000000..04a062b --- /dev/null +++ b/fuzz/Cargo.lock @@ -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", +] diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml new file mode 100644 index 0000000..3ca8e57 --- /dev/null +++ b/fuzz/Cargo.toml @@ -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 diff --git a/fuzz/fuzz_targets/lex.rs b/fuzz/fuzz_targets/lex.rs new file mode 100644 index 0000000..8373a10 --- /dev/null +++ b/fuzz/fuzz_targets/lex.rs @@ -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::>(); +}); diff --git a/fuzz/fuzz_targets/lex_parse.rs b/fuzz/fuzz_targets/lex_parse.rs new file mode 100644 index 0000000..c5f7755 --- /dev/null +++ b/fuzz/fuzz_targets/lex_parse.rs @@ -0,0 +1,6 @@ +#![no_main] +use libfuzzer_sys::fuzz_target; + +fuzz_target!(|data: &[u8]| { + // fuzzed code goes here +}); diff --git a/src/bird/mod.rs b/src/bird/mod.rs index 8214411..1a9ba51 100644 --- a/src/bird/mod.rs +++ b/src/bird/mod.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + mod mem; use crate::ast::Program; diff --git a/src/lib.rs b/src/lib.rs index c699edd..59e1682 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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::, _>(|result| result.is_ok());