diff --git a/rechannel/src/channel/block.rs b/rechannel/src/channel/block.rs index d961c22d..bd08d00f 100644 --- a/rechannel/src/channel/block.rs +++ b/rechannel/src/channel/block.rs @@ -193,7 +193,7 @@ impl SendBlockChannel { info!( "Generated SliceMessage {} from chunk_id {}. ({}/{})", - message.slice_id, self.chunk_id, message.slice_id, num_slices + message.slice_id, self.chunk_id, message.slice_id + 1, *num_slices ); slice_messages.push(message); @@ -294,6 +294,12 @@ impl SendChannel for SendBlockChannel { return; } + if payload.is_empty() { + log::error!("Tried to send empty block message"); + self.error = Some(ChannelError::SentEmptyMessage); + return; + } + if payload.len() as u64 > self.max_message_size { log::error!( "Tried to send block message with size above the limit, got {} bytes, expected less than {}", diff --git a/rechannel/src/channel/reliable.rs b/rechannel/src/channel/reliable.rs index 4331ff14..dd53120c 100644 --- a/rechannel/src/channel/reliable.rs +++ b/rechannel/src/channel/reliable.rs @@ -240,6 +240,12 @@ impl SendChannel for SendReliableChannel { return; } + if payload.is_empty() { + log::error!("Tried to send empty reliable message"); + self.error = Some(ChannelError::SentEmptyMessage); + return; + } + self.send_message_id = self.send_message_id.wrapping_add(1); let reliable_message = ReliableMessage::new(message_id, payload); diff --git a/rechannel/src/channel/unreliable.rs b/rechannel/src/channel/unreliable.rs index f2f82f77..97653eb8 100644 --- a/rechannel/src/channel/unreliable.rs +++ b/rechannel/src/channel/unreliable.rs @@ -118,6 +118,12 @@ impl SendChannel for SendUnreliableChannel { return; } + if payload.is_empty() { + log::error!("Tried to send empty unreliable message"); + self.error = Some(ChannelError::SentEmptyMessage); + return; + } + if self.messages_to_send.len() >= self.message_send_queue_size { self.error = Some(ChannelError::SendQueueFull); log::warn!("Unreliable channel {} has reached the maximum queue size", self.channel_id); diff --git a/rechannel/src/error.rs b/rechannel/src/error.rs index 85fc00b7..2e4313a0 100644 --- a/rechannel/src/error.rs +++ b/rechannel/src/error.rs @@ -31,6 +31,8 @@ pub enum ChannelError { FailedToSerialize, /// Tried to send a message that is above the channel max message size. SentMessageAboveMaxSize, + /// Tried to send an empty message + SentEmptyMessage, /// Received a message above above the channel max message size. ReceivedMessageAboveMaxSize, /// Received an invalid slice message in a block channel. @@ -46,6 +48,7 @@ impl fmt::Display for ChannelError { SendQueueFull => write!(fmt, "send queue was full"), FailedToSerialize => write!(fmt, "failed to serialize or deserialize"), SentMessageAboveMaxSize => write!(fmt, "sent message above the channel max message size"), + SentEmptyMessage => write!(fmt, "sent empty message"), ReceivedMessageAboveMaxSize => write!(fmt, "received message above the channel max message size"), InvalidSliceMessage => write!(fmt, "received an invalid slice message in a block channel"), }