|  | // Copyright 2020 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // This is the "library code" tested in this example. | 
|  | // Compare with https://llvm.org/docs/LibFuzzer.html#toy-example | 
|  | use {fuzz::fuzz, helper::toy_example}; | 
|  |  | 
|  | // Imports that are only used by `main` needs to be conditional included. | 
|  | #[cfg(not(fuzz))] | 
|  | use std::io::{self, Read}; | 
|  |  | 
|  | // Conditionally include `main`, allowing it to be omitted when provided by a compiler runtime. | 
|  | #[cfg(not(fuzz))] | 
|  | fn main() -> io::Result<()> { | 
|  | let mut s = String::new(); | 
|  | io::stdin().read_to_string(&mut s)?; | 
|  | let _ = toy_example(s); | 
|  | Ok(()) | 
|  | } | 
|  |  | 
|  | // This is the "fuzzer code" for the binary code above. | 
|  | // It can typically be placed alongside that code and will only be compiled when fuzzing. | 
|  | #[cfg(fuzz)] | 
|  | use helper::add_bang; | 
|  |  | 
|  | #[fuzz] | 
|  | fn toy_example_with_main(input: String) { | 
|  | let _ = toy_example(add_bang(input)); | 
|  | } |