| // Copyright 2019 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| pub mod rand; |
| |
| cfg_if::cfg_if! { |
| if #[cfg(not(fuzzing))] { |
| /// A stub implementation that ensures the fuzzer code can be compiled but does not provide |
| /// any fuzzing functionality. |
| /// This allows the fuzzer code to be verified in CI without a nightly cargo toolchain. |
| #[macro_export] |
| macro_rules! fuzz_target { |
| (|$bytes:ident| $body:block) => { |
| // fuzzers are configured with no_main. To make the binary compile, we manually |
| // provide the main function with no_mangle. |
| #[no_mangle] |
| pub extern fn main($bytes: &[u8]) { |
| $body |
| } |
| }; |
| (|$bytes:ident: &[u8]| $body:block) => { |
| fuzz_target!(|$bytes| $body); |
| }; |
| } |
| } else { |
| pub use libfuzzer_sys::fuzz_target; |
| } |
| } |