rust-fuzz / libfuzzer

Rust bindings and utilities for LLVM’s libFuzzer
Apache License 2.0
215 stars 46 forks source link

Allow "closure" body to be any expression, not only block #105

Closed dtolnay closed 1 year ago

dtolnay commented 1 year ago

The fuzz_target! macro's input is designed to follow Rust's closure syntax, and mimics nearly all the syntax features of Rust closures: optional argument type, optional return type.

However, it diverged from Rust closures in requiring the body of the "closure" to always be surrounded in curly braces, due to the use of $:block.

I had a fuzz target where I had to end up doing the following:

fuzz_target!(|bytes: &[u8]| { do_fuzz(bytes, true) });

The braces here diverge from how the equivalent closure would ordinarily be written. Punctuation which is required but doesn't serve a purpose detracts from the readability of the program.

This PR makes the braces around a "closure" body optional.

fuzz_target!(|bytes: &[u8]| do_fuzz(bytes, true));