X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=fuzz%2Ffuzz_targets%2Fmsg_targets%2Futils.rs;h=a5257ba0f80c1fea24f399018103da37f572c763;hb=19b92448c579982fcfcd52e28448323576472883;hp=c1bcd8f361887003d4e2823d2e5445fc4ce16496;hpb=f27c74b35cb4a9b5f44776ac6d3934e74143d51b;p=rust-lightning diff --git a/fuzz/fuzz_targets/msg_targets/utils.rs b/fuzz/fuzz_targets/msg_targets/utils.rs index c1bcd8f3..a5257ba0 100644 --- a/fuzz/fuzz_targets/msg_targets/utils.rs +++ b/fuzz/fuzz_targets/msg_targets/utils.rs @@ -1,19 +1,31 @@ #![macro_use] +use lightning::util::ser::Writer; +pub struct VecWriter(pub Vec); +impl Writer for VecWriter { + fn write_all(&mut self, buf: &[u8]) -> Result<(), ::std::io::Error> { + assert!(self.0.capacity() >= self.0.len() + buf.len()); + self.0.extend_from_slice(buf); + Ok(()) + } + fn size_hint(&mut self, size: usize) { + self.0.reserve_exact(size); + } +} + #[macro_export] macro_rules! test_msg { ($MsgType: path, $data: ident) => { { - use lightning::util::ser::{Writer, Reader, Writeable, Readable}; - let mut r = Reader::new(::std::io::Cursor::new($data)); + use lightning::util::ser::{Writeable, Readable}; + let mut r = ::std::io::Cursor::new($data); if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) { - let p = r.get_ref().position() as usize; - let mut w = Writer::new(::std::io::Cursor::new(vec![])); + let p = r.position() as usize; + let mut w = VecWriter(Vec::new()); msg.write(&mut w).unwrap(); - let buf = w.into_inner().into_inner(); - assert_eq!(buf.len(), p); - assert_eq!(&r.into_inner().into_inner()[..p], &buf[..p]); + assert_eq!(w.0.len(), p); + assert_eq!(&r.into_inner()[..p], &w.0[..p]); } } } @@ -23,10 +35,11 @@ macro_rules! test_msg { macro_rules! test_msg_simple { ($MsgType: path, $data: ident) => { { - use lightning::util::ser::{Writer, Reader, Writeable, Readable}; - let mut r = Reader::new(::std::io::Cursor::new($data)); + use lightning::util::ser::{Writeable, Readable}; + let mut r = ::std::io::Cursor::new($data); if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) { - msg.write(&mut Writer::new(::std::io::Cursor::new(vec![]))).unwrap(); + let mut w = VecWriter(Vec::new()); + msg.write(&mut w).unwrap(); } } } @@ -36,14 +49,13 @@ macro_rules! test_msg_simple { macro_rules! test_msg_exact { ($MsgType: path, $data: ident) => { { - use lightning::util::ser::{Writer, Reader, Writeable, Readable}; - let mut r = Reader::new(::std::io::Cursor::new($data)); + use lightning::util::ser::{Writeable, Readable}; + let mut r = ::std::io::Cursor::new($data); if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) { - let mut w = Writer::new(::std::io::Cursor::new(vec![])); + let mut w = VecWriter(Vec::new()); msg.write(&mut w).unwrap(); - let buf = w.into_inner().into_inner(); - assert_eq!(&r.into_inner().into_inner()[..], &buf[..]); + assert_eq!(&r.into_inner()[..], &w.0[..]); } } } @@ -53,17 +65,16 @@ macro_rules! test_msg_exact { macro_rules! test_msg_hole { ($MsgType: path, $data: ident, $hole: expr, $hole_len: expr) => { { - use lightning::util::ser::{Writer, Reader, Writeable, Readable}; - let mut r = Reader::new(::std::io::Cursor::new($data)); + use lightning::util::ser::{Writeable, Readable}; + let mut r = ::std::io::Cursor::new($data); if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) { - let mut w = Writer::new(::std::io::Cursor::new(vec![])); + let mut w = VecWriter(Vec::new()); msg.write(&mut w).unwrap(); - let p = w.get_ref().position() as usize; + let p = w.0.len() as usize; - let buf = w.into_inner().into_inner(); - assert_eq!(buf.len(),p); - assert_eq!(&r.get_ref().get_ref()[..$hole], &buf[..$hole]); - assert_eq!(&r.get_ref().get_ref()[$hole+$hole_len..p], &buf[$hole+$hole_len..]); + assert_eq!(w.0.len(), p); + assert_eq!(&r.get_ref()[..$hole], &w.0[..$hole]); + assert_eq!(&r.get_ref()[$hole+$hole_len..p], &w.0[$hole+$hole_len..]); } } }