Skip to content

Commit b1686d1

Browse files
committed
fix(buffer): check capacity before resizing
``cmp::min(cap * 4, MAX_BUFFER_SIZE) - cap'' can underflow when cap > MAX_BUFFER_SIZE. cap can exceed MAX_BUFFER_SIZE because Vec::reserve aligns to powers of two. Discovered by Matt Howard <themdhoward@gmail.com>
1 parent 9dc8527 commit b1686d1

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/buffer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl<R: Read> BufReader<R> {
6767
#[inline]
6868
fn maybe_reserve(&mut self) {
6969
let cap = self.buf.capacity();
70-
if self.cap == cap {
70+
if self.cap == cap && cap < MAX_BUFFER_SIZE {
7171
self.buf.reserve(cmp::min(cap * 4, MAX_BUFFER_SIZE) - cap);
7272
let new = self.buf.capacity() - self.buf.len();
7373
trace!("reserved {}", new);

0 commit comments

Comments
 (0)