summaryrefslogtreecommitdiffstats
path: root/buffered-reader
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-04-02 13:42:36 +0200
committerJustus Winter <justus@sequoia-pgp.org>2019-04-02 13:46:35 +0200
commite2acedd9dab268f288c45ba6b44129fa635f1c2b (patch)
treed46b44ee6fce29e927bd31192a5720665cc8b80c /buffered-reader
parent53cfb8e582b4d79bd4b6ecd64e2de379efbaa0c4 (diff)
buffered-reader: Fix limit computation.
- Previously, if the underlying reader returned less data than 'amount', the limit would still be reduced by 'amount'.
Diffstat (limited to 'buffered-reader')
-rw-r--r--buffered-reader/src/limitor.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/buffered-reader/src/limitor.rs b/buffered-reader/src/limitor.rs
index e7e84d29..78fcd34a 100644
--- a/buffered-reader/src/limitor.rs
+++ b/buffered-reader/src/limitor.rs
@@ -98,6 +98,7 @@ impl<'a, C> BufferedReader<C> for Limitor<'a, C> {
let amount = cmp::min(amount as u64, self.limit) as usize;
let result = self.reader.data_consume(amount);
if let Ok(ref buffer) = result {
+ let amount = cmp::min(amount, buffer.len());
self.limit -= amount as u64;
return Ok(&buffer[
..cmp::min(buffer.len() as u64, self.limit + amount as u64) as usize]);
@@ -111,6 +112,7 @@ impl<'a, C> BufferedReader<C> for Limitor<'a, C> {
}
let result = self.reader.data_consume_hard(amount);
if let Ok(ref buffer) = result {
+ let amount = cmp::min(amount, buffer.len());
self.limit -= amount as u64;
return Ok(&buffer[
..cmp::min(buffer.len() as u64, self.limit + amount as u64) as usize]);