From 9e8ac21d902bed073a595e5a295ab7154642688a Mon Sep 17 00:00:00 2001 From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:34:36 +1100 Subject: [PATCH] Revert "Fix panic when decoding" --- src/futures/bufread/generic/decoder.rs | 18 +++++++++--------- src/tokio/bufread/generic/decoder.rs | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index 60b0f69a..a3a968a7 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -84,20 +84,20 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = match this.decoder.decode(&mut input, output) { - Ok(done) => { - let consumed = input.written().len(); - this.reader.as_mut().consume(consumed); - done - } + let done = 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 - Err(err) if first => false, - Err(err) => return Poll::Ready(Err(err)), - }; + if first { + Ok(false) + } else { + Err(err) + } + })?; first = false; + let len = input.written().len(); + this.reader.as_mut().consume(len); if done { State::Flushing } else { diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index c5c16d18..aa568f4f 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -84,20 +84,20 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = match this.decoder.decode(&mut input, output) { - Ok(done) => { - let consumed = input.written().len(); - this.reader.as_mut().consume(consumed); - done - } + let done = 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 - Err(err) if first => false, - Err(err) => return Poll::Ready(Err(err)), - }; + if first { + Ok(false) + } else { + Err(err) + } + })?; first = false; + let len = input.written().len(); + this.reader.as_mut().consume(len); if done { State::Flushing } else {