diff --git a/src/message.rs b/src/message.rs index 68aca5de..aa47f621 100644 --- a/src/message.rs +++ b/src/message.rs @@ -246,7 +246,10 @@ impl WriteMessage for W { } // add size of length value - try!(self.write_u32::(try!(u32::from_usize(buf.len() + mem::size_of::())))); + if buf.len() > u32::max_value() as usize - mem::size_of::() { + return Err(io::Error::new(io::ErrorKind::InvalidInput, "value too large to transmit")); + } + try!(self.write_u32::((buf.len() + mem::size_of::()) as u32)); try!(self.write_all(&*buf)); Ok(())