afl: add main file

for testing that crashes have been resolved

previously, binary of the main crate was used, but targets may have more
validation than simply checking for panics
This commit is contained in:
Noah Hellman 2023-03-12 18:47:59 +01:00
parent 3e56903885
commit 8f70f596b9
3 changed files with 24 additions and 3 deletions

View file

@ -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

View file

@ -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"

17
tests/afl/src/main.rs Normal file
View file

@ -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);
}