diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index 123d90f..e97f0fc 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -88,7 +88,7 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { + let res = this.decoder.decode(&mut input, output).or_else(|err| { // ignore the first error, occurs when input is empty // but we need to run decode to flush if first { @@ -96,13 +96,16 @@ impl Decoder { } else { Err(err) } - })?; + }); + + if !first { + let len = input.written().len(); + this.reader.as_mut().consume(len); + } first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); - if done { + if res? { State::Flushing } else { State::Decoding diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index 522835c..c4fdb98 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -88,7 +88,7 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { + let res = this.decoder.decode(&mut input, output).or_else(|err| { // ignore the first error, occurs when input is empty // but we need to run decode to flush if first { @@ -96,13 +96,16 @@ impl Decoder { } else { Err(err) } - })?; + }); + + if !first { + let len = input.written().len(); + this.reader.as_mut().consume(len); + } first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); - if done { + if res? { State::Flushing } else { State::Decoding