diff --git a/src/protocol/frame/frame.rs b/src/protocol/frame/frame.rs index 1dc19be..8923f30 100644 --- a/src/protocol/frame/frame.rs +++ b/src/protocol/frame/frame.rs @@ -1,11 +1,10 @@ use std::fmt; use std::borrow::Cow; -use std::mem::transmute; use std::io::{Cursor, Read, Write, ErrorKind}; use std::default::Default; use std::string::{String, FromUtf8Error}; use std::result::Result as StdResult; -use byteorder::{ByteOrder, ReadBytesExt, NetworkEndian}; +use byteorder::{ByteOrder, ReadBytesExt, WriteBytesExt, NetworkEndian}; use bytes::BufMut; use error::{Error, Result}; @@ -260,11 +259,10 @@ impl Frame { #[inline] pub fn close(msg: Option) -> Frame { let payload = if let Some(CloseFrame { code, reason }) = msg { - let raw: [u8; 2] = unsafe { - let u: u16 = code.into(); - transmute(u.to_be()) - }; - [&raw[..], reason.as_bytes()].concat() + let mut p = Vec::with_capacity(reason.as_bytes().len() + 2); + p.write_u16::(code.into()).unwrap(); // can't fail + p.extend_from_slice(reason.as_bytes()); + p } else { Vec::new() };