Skip to content

Commit 9d9fe02

Browse files
authored
Merge pull request #299 from Nullus157/Fix/decode
Fix panic when decoding
2 parents 2d57a18 + 2f4f8a7 commit 9d9fe02

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

src/futures/bufread/generic/decoder.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,20 @@ impl<R: AsyncBufRead, D: Decode> Decoder<R, D> {
8484
State::Flushing
8585
} else {
8686
let mut input = PartialBuffer::new(input);
87-
let done = this.decoder.decode(&mut input, output).or_else(|err| {
87+
let done = match this.decoder.decode(&mut input, output) {
88+
Ok(done) => {
89+
let consumed = input.written().len();
90+
this.reader.as_mut().consume(consumed);
91+
done
92+
}
8893
// ignore the first error, occurs when input is empty
8994
// but we need to run decode to flush
90-
if first {
91-
Ok(false)
92-
} else {
93-
Err(err)
94-
}
95-
})?;
95+
Err(err) if first => false,
96+
Err(err) => return Poll::Ready(Err(err)),
97+
};
9698

9799
first = false;
98100

99-
let len = input.written().len();
100-
this.reader.as_mut().consume(len);
101101
if done {
102102
State::Flushing
103103
} else {

src/tokio/bufread/generic/decoder.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,20 @@ impl<R: AsyncBufRead, D: Decode> Decoder<R, D> {
8484
State::Flushing
8585
} else {
8686
let mut input = PartialBuffer::new(input);
87-
let done = this.decoder.decode(&mut input, output).or_else(|err| {
87+
let done = match this.decoder.decode(&mut input, output) {
88+
Ok(done) => {
89+
let consumed = input.written().len();
90+
this.reader.as_mut().consume(consumed);
91+
done
92+
}
8893
// ignore the first error, occurs when input is empty
8994
// but we need to run decode to flush
90-
if first {
91-
Ok(false)
92-
} else {
93-
Err(err)
94-
}
95-
})?;
95+
Err(err) if first => false,
96+
Err(err) => return Poll::Ready(Err(err)),
97+
};
9698

9799
first = false;
98100

99-
let len = input.written().len();
100-
this.reader.as_mut().consume(len);
101101
if done {
102102
State::Flushing
103103
} else {

0 commit comments

Comments
 (0)