X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=fuzz%2Ffuzz_targets%2Fchanmon_deser_target.rs;h=ba525081a712ef3e5b27fcdbad48efe8a53d4809;hb=d33cb3cca560ec33b33542c1ef6e47f15b35e30a;hp=a7e9079a73883580a2cada40fb19b95cb3b2566e;hpb=1b8f4acb275621d52316ae1e5f1059b15f3a120e;p=rust-lightning diff --git a/fuzz/fuzz_targets/chanmon_deser_target.rs b/fuzz/fuzz_targets/chanmon_deser_target.rs index a7e9079a..ba525081 100644 --- a/fuzz/fuzz_targets/chanmon_deser_target.rs +++ b/fuzz/fuzz_targets/chanmon_deser_target.rs @@ -5,13 +5,30 @@ extern crate lightning; use lightning::ln::channelmonitor; use lightning::util::reset_rng_state; +use lightning::util::ser::{Readable, Writer}; + +use std::io::Cursor; + +struct VecWriter(Vec); +impl Writer for VecWriter { + fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> { + self.0.extend_from_slice(buf); + Ok(()) + } + fn size_hint(&mut self, size: usize) { + self.0.reserve_exact(size); + } +} #[inline] pub fn do_test(data: &[u8]) { reset_rng_state(); - if let Some(monitor) = channelmonitor::ChannelMonitor::deserialize(data) { - assert!(channelmonitor::ChannelMonitor::deserialize(&monitor.serialize_for_disk()[..]).unwrap() == monitor); - monitor.serialize_for_watchtower(); + if let Ok(monitor) = channelmonitor::ChannelMonitor::read(&mut Cursor::new(data)) { + let mut w = VecWriter(Vec::new()); + monitor.write_for_disk(&mut w).unwrap(); + assert!(channelmonitor::ChannelMonitor::read(&mut Cursor::new(&w.0)).unwrap() == monitor); + w.0.clear(); + monitor.write_for_watchtower(&mut w).unwrap(); } }