diff --git a/Makefile b/Makefile index cc67ad8..afc8818 100644 --- a/Makefile +++ b/Makefile @@ -78,13 +78,12 @@ afl_quick: afl_crash: set +e; \ for f in $$(find tests/afl/out -path '*/${AFL_TARGET_CRASH}/id*'); do \ - echo "cat $$f | RUST_BACKTRACE=1 cargo run"; \ - out=$$(cat $$f | RUST_BACKTRACE=1 cargo run 2>&1); \ + echo $$f; \ + out=$$(cat $$f | (cd tests/afl && RUST_BACKTRACE=1 cargo run ${AFL_TARGET} 2>&1)); \ if [ $$? -ne 0 ]; then \ echo; \ echo "FAIL"; \ echo "$$out"; \ - echo "cat $$f | RUST_BACKTRACE=1 cargo run"; \ exit 1; \ fi; \ done diff --git a/tests/afl/Cargo.toml b/tests/afl/Cargo.toml index 52e6595..36dcf82 100644 --- a/tests/afl/Cargo.toml +++ b/tests/afl/Cargo.toml @@ -2,11 +2,16 @@ name = "jotdown-afl" version = "0.1.0" edition = "2021" +default-run = "main" [dependencies] afl = "0.11" jotdown = { path = "../../", features = ["deterministic"] } +[[bin]] +name = "main" +path = "src/main.rs" + [[bin]] name = "parse" path = "src/parse.rs" diff --git a/tests/afl/src/main.rs b/tests/afl/src/main.rs new file mode 100644 index 0000000..c04247b --- /dev/null +++ b/tests/afl/src/main.rs @@ -0,0 +1,17 @@ +use std::io::Read; + +fn main() { + let mut args = std::env::args(); + let _program = args.next(); + let target = args.next().expect("no target"); + assert_eq!(args.next(), None); + + let f = match target.as_str() { + "parse" => jotdown_afl::parse, + _ => panic!("unknown target '{}'", target), + }; + + let mut input = Vec::new(); + std::io::stdin().read_to_end(&mut input).unwrap(); + f(&input); +}