Merge pull request #51 from TheBlueMatt/master
[rust-lightning] / fuzz / fuzz_targets / chanmon_deser_target.rs
1 // This file is auto-generated by gen_target.sh based on msg_target_template.txt
2 // To modify it, modify msg_target_template.txt and run gen_target.sh instead.
3
4 extern crate lightning;
5
6 use lightning::ln::channelmonitor;
7 use lightning::util::reset_rng_state;
8
9 #[inline]
10 pub fn do_test(data: &[u8]) {
11         reset_rng_state();
12         if let Some(monitor) = channelmonitor::ChannelMonitor::deserialize(data) {
13                 assert!(channelmonitor::ChannelMonitor::deserialize(&monitor.serialize_for_disk()[..]).unwrap() == monitor);
14                 monitor.serialize_for_watchtower();
15         }
16 }
17
18 #[cfg(feature = "afl")]
19 extern crate afl;
20 #[cfg(feature = "afl")]
21 fn main() {
22         afl::read_stdio_bytes(|data| {
23                 do_test(&data);
24         });
25 }
26
27 #[cfg(feature = "honggfuzz")]
28 #[macro_use] extern crate honggfuzz;
29 #[cfg(feature = "honggfuzz")]
30 fn main() {
31         loop {
32                 fuzz!(|data| {
33                         do_test(data);
34                 });
35         }
36 }
37
38 #[cfg(test)]
39 mod tests {
40         fn extend_vec_from_hex(hex: &str, out: &mut Vec<u8>) {
41                 let mut b = 0;
42                 for (idx, c) in hex.as_bytes().iter().enumerate() {
43                         b <<= 4;
44                         match *c {
45                                 b'A'...b'F' => b |= c - b'A' + 10,
46                                 b'a'...b'f' => b |= c - b'a' + 10,
47                                 b'0'...b'9' => b |= c - b'0',
48                                 _ => panic!("Bad hex"),
49                         }
50                         if (idx & 1) == 1 {
51                                 out.push(b);
52                                 b = 0;
53                         }
54                 }
55         }
56
57         #[test]
58         fn duplicate_crash() {
59                 let mut a = Vec::new();
60                 extend_vec_from_hex("00", &mut a);
61                 super::do_test(&a);
62         }
63 }