fix(http): fix encoding when buffer is full

This commit is contained in:
Sean McArthur
2017-07-17 11:19:32 -07:00
parent d6da3f7b40
commit fc5b9cce31
3 changed files with 12 additions and 2 deletions

View File

@@ -803,6 +803,8 @@ mod tests {
#[test]
fn test_conn_body_write_length() {
extern crate pretty_env_logger;
let _ = pretty_env_logger::init();
let _: Result<(), ()> = future::lazy(|| {
let io = AsyncIo::new_buf(vec![], 0);
let mut conn = Conn::<_, http::Chunk, ServerTransaction>::new(io, Default::default());

View File

@@ -54,9 +54,12 @@ impl Encoder {
chunked.encode(w, msg)
},
Kind::Length(ref mut remaining) => {
if msg.is_empty() {
return Ok(0);
}
let n = {
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];
try!(w.write_atomic(&[slice]))

View File

@@ -130,7 +130,12 @@ impl<T: AsyncRead + AsyncWrite> Buffered<T> {
impl<T: Write> Write for Buffered<T> {
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<()> {