fix(http): fix encoding when buffer is full
This commit is contained in:
		| @@ -803,6 +803,8 @@ mod tests { | |||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_conn_body_write_length() { |     fn test_conn_body_write_length() { | ||||||
|  |         extern crate pretty_env_logger; | ||||||
|  |         let _ = pretty_env_logger::init(); | ||||||
|         let _: Result<(), ()> = future::lazy(|| { |         let _: Result<(), ()> = future::lazy(|| { | ||||||
|             let io = AsyncIo::new_buf(vec![], 0); |             let io = AsyncIo::new_buf(vec![], 0); | ||||||
|             let mut conn = Conn::<_, http::Chunk, ServerTransaction>::new(io, Default::default()); |             let mut conn = Conn::<_, http::Chunk, ServerTransaction>::new(io, Default::default()); | ||||||
|   | |||||||
| @@ -54,9 +54,12 @@ impl Encoder { | |||||||
|                 chunked.encode(w, msg) |                 chunked.encode(w, msg) | ||||||
|             }, |             }, | ||||||
|             Kind::Length(ref mut remaining) => { |             Kind::Length(ref mut remaining) => { | ||||||
|  |                 if msg.is_empty() { | ||||||
|  |                     return Ok(0); | ||||||
|  |                 } | ||||||
|                 let n = { |                 let n = { | ||||||
|                     let max = cmp::min(*remaining as usize, msg.len()); |                     let max = cmp::min(*remaining as usize, msg.len()); | ||||||
|                     trace!("sized write, len = {}", max); |                     trace!("sized write, len = {}, remaining = {}", max, remaining); | ||||||
|                     let slice = &msg[..max]; |                     let slice = &msg[..max]; | ||||||
|  |  | ||||||
|                     try!(w.write_atomic(&[slice])) |                     try!(w.write_atomic(&[slice])) | ||||||
|   | |||||||
| @@ -130,7 +130,12 @@ impl<T: AsyncRead + AsyncWrite> Buffered<T> { | |||||||
|  |  | ||||||
| impl<T: Write> Write for Buffered<T> { | impl<T: Write> Write for Buffered<T> { | ||||||
|     fn write(&mut self, data: &[u8]) -> io::Result<usize> { |     fn write(&mut self, data: &[u8]) -> io::Result<usize> { | ||||||
|         Ok(self.write_buf.buffer(data)) |         let n = self.write_buf.buffer(data); | ||||||
|  |         if n == 0 { | ||||||
|  |             Err(io::Error::from(io::ErrorKind::WouldBlock)) | ||||||
|  |         } else { | ||||||
|  |             Ok(n) | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fn flush(&mut self) -> io::Result<()> { |     fn flush(&mut self) -> io::Result<()> { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user