diff --git a/node/src/protocol/filter.rs b/node/src/protocol/filter.rs index 528067ea..4ba44a9a 100644 --- a/node/src/protocol/filter.rs +++ b/node/src/protocol/filter.rs @@ -70,11 +70,10 @@ impl wire::Encode for Filter { impl wire::Decode for Filter { fn decode(reader: &mut R) -> Result { - let size: usize = wire::Decode::decode(reader)?; - if size != FILTER_SIZE { - return Err(wire::Error::InvalidFilterSize(size)); + let size: wire::Size = wire::Decode::decode(reader)?; + if size as usize != FILTER_SIZE { + return Err(wire::Error::InvalidFilterSize(size as usize)); } - let bytes: [u8; FILTER_SIZE] = wire::Decode::decode(reader)?; let bf = BloomFilter::from(Vec::from(bytes)); diff --git a/node/src/protocol/wire.rs b/node/src/protocol/wire.rs index 7b5267aa..6edc0de1 100644 --- a/node/src/protocol/wire.rs +++ b/node/src/protocol/wire.rs @@ -13,6 +13,11 @@ use crate::hash::Digest; use crate::identity::Id; use crate::storage::refs::Refs; +/// The default type we use to represent sizes. +/// Four bytes is more than enough for anything sent over the wire. +/// Note that in certain cases, we may use only one or two byte types. +pub type Size = u32; + #[derive(thiserror::Error, Debug)] pub enum Error { #[error("i/o: {0}")] @@ -147,7 +152,7 @@ where T: Encode, { fn encode(&self, writer: &mut W) -> Result { - let mut n = self.len().encode(writer)?; + let mut n = (self.len() as Size).encode(writer)?; for item in self.iter() { n += item.encode(writer)?; @@ -324,8 +329,8 @@ where T: Decode, { fn decode(reader: &mut R) -> Result { - let len: usize = usize::decode(reader)?; - let mut vec = Vec::with_capacity(len); + let len: Size = Size::decode(reader)?; + let mut vec = Vec::with_capacity(len as usize); for _ in 0..len { let item = T::decode(reader)?;