fix fuzzing

it leaks????
This commit is contained in:
nora 2021-12-30 18:23:21 +01:00
parent 9eff0f0188
commit 145d63e755
12 changed files with 35 additions and 284 deletions

2
afl-fuzz/.gitignore vendored
View file

@ -1,2 +0,0 @@
target
out

225
afl-fuzz/Cargo.lock generated
View file

@ -1,225 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "afl"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a11168df76afe8cbf3a60e3bb5d9ec5d57cfc482a7bc96afc22006970bc04264"
dependencies = [
"cc",
"clap",
"libc",
"rustc_version",
"xdg",
]
[[package]]
name = "afl-fuzz"
version = "0.1.0"
dependencies = [
"afl",
"script_lang",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi",
]
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cc"
version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
dependencies = [
"ansi_term",
"atty",
"bitflags",
"strsim",
"textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "dirs"
version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
dependencies = [
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "getrandom"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "libc"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673"
[[package]]
name = "redox_syscall"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
dependencies = [
"getrandom",
"redox_syscall",
]
[[package]]
name = "rustc_version"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [
"semver",
]
[[package]]
name = "script_lang"
version = "0.1.0"
[[package]]
name = "semver"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "wasi"
version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "xdg"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a23fe958c70412687039c86f578938b4a0bb50ec788e96bce4d6ab00ddd5803"
dependencies = [
"dirs",
]

View file

@ -1,10 +0,0 @@
[package]
name = "afl-fuzz"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
afl = "0.11.0"
script_lang = { path = ".." }

View file

@ -1,9 +0,0 @@
fn main() {
let x = 1 * 1 + 5;
print("hallo");
main();
fn dead_at_this_point(test) {
print("cool" + 5);
}
}

View file

@ -1,13 +0,0 @@
#[macro_use]
extern crate afl;
fn main() {
fuzz!(|data: &[u8]| {
if let Ok(s) = std::str::from_utf8(data) {
let tokens = script_lang::Lexer::lex(s).collect::<Result<Vec<_>, _>>();
if let Ok(tokens) = tokens {
let _ = script_lang::parse(tokens);
}
}
});
}

33
fuzz/Cargo.lock generated
View file

@ -8,12 +8,33 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "577b08a4acd7b99869f863c50011b01eb73424ccc798ecd996f2e24817adfca7" checksum = "577b08a4acd7b99869f863c50011b01eb73424ccc798ecd996f2e24817adfca7"
[[package]]
name = "bumpalo"
version = "3.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.71" version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
[[package]]
name = "dilaria"
version = "0.1.0"
dependencies = [
"bumpalo",
]
[[package]]
name = "dilaria-fuzz"
version = "0.0.0"
dependencies = [
"dilaria",
"libfuzzer-sys",
]
[[package]] [[package]]
name = "libfuzzer-sys" name = "libfuzzer-sys"
version = "0.4.2" version = "0.4.2"
@ -30,15 +51,3 @@ name = "once_cell"
version = "1.8.0" version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "script_lang"
version = "0.1.0"
[[package]]
name = "script_lang-fuzz"
version = "0.0.0"
dependencies = [
"libfuzzer-sys",
"script_lang",
]

View file

@ -1,5 +1,5 @@
[package] [package]
name = "script_lang-fuzz" name = "dilaria-fuzz"
version = "0.0.0" version = "0.0.0"
authors = ["Automatically generated"] authors = ["Automatically generated"]
publish = false publish = false
@ -11,7 +11,7 @@ cargo-fuzz = true
[dependencies] [dependencies]
libfuzzer-sys = "0.4" libfuzzer-sys = "0.4"
[dependencies.script_lang] [dependencies.dilaria]
path = ".." path = ".."
# Prevent this from interfering with workspaces # Prevent this from interfering with workspaces

View file

@ -2,6 +2,6 @@
use libfuzzer_sys::fuzz_target; use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: String| { fuzz_target!(|data: String| {
let lexer = script_lang::Lexer::lex(&data); let lexer = dilaria::Lexer::new(&data);
let _tokens = lexer.collect::<Vec<_>>(); for _ in lexer {}
}); });

View file

@ -2,10 +2,9 @@
use libfuzzer_sys::fuzz_target; use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: String| { fuzz_target!(|data: String| {
let lexer = script_lang::Lexer::lex(&data); let ast_alloc = dilaria::Bump::new();
let tokens = lexer.collect::<Result<Vec<_>, _>>();
if let Ok(tokens) = tokens { let lexer = dilaria::Lexer::new(&data);
let _ast = script_lang::parse(tokens);
} let _ast = dilaria::parse(lexer, &ast_alloc);
}); });

View file

@ -9,8 +9,8 @@ mod parse;
mod value; mod value;
use crate::ast::Program; use crate::ast::Program;
use bumpalo::Bump;
pub use bumpalo::Bump;
pub use lex::*; pub use lex::*;
pub use parse::*; pub use parse::*;

View file

@ -546,7 +546,7 @@ where
span: next.span, span: next.span,
})) }))
} }
TokenKind::Error(error) => Err(error), TokenKind::Error(error) => Err(*error),
_ => Err(CompilerError::new( _ => Err(CompilerError::new(
next.span, next.span,
format!("invalid token in expression: `{:?}`", next.kind), format!("invalid token in expression: `{:?}`", next.kind),
@ -570,7 +570,7 @@ where
span, span,
}) })
} }
TokenKind::Error(error) => Err(error), TokenKind::Error(error) => Err(*error),
_ => { _ => {
return Err(CompilerError::new( return Err(CompilerError::new(
span, span,
@ -665,7 +665,7 @@ where
if token.kind == kind { if token.kind == kind {
Ok(token) Ok(token)
} else if let TokenKind::Error(err) = token.kind { } else if let TokenKind::Error(err) = token.kind {
Err(err) Err(*err)
} else { } else {
Err(CompilerError::new( Err(CompilerError::new(
token.span, token.span,

View file

@ -1,3 +1,5 @@
#![allow(dead_code)]
use std::collections::LinkedList; use std::collections::LinkedList;
use std::fmt::{Debug, Formatter}; use std::fmt::{Debug, Formatter};
use std::ops::Deref; use std::ops::Deref;