From 18e78b91de236fb216575809840de29298c79ce3 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Wed, 24 Jun 2015 22:47:56 -0700 Subject: [PATCH] Avoid overflow in Vec::from_iter Closes #26550 --- src/libcollections/vec.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 54528c50f1d1..3aac1829a0c7 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1482,7 +1482,7 @@ impl FromIterator for Vec { None => return Vec::new(), Some(element) => { let (lower, _) = iterator.size_hint(); - let mut vector = Vec::with_capacity(1 + lower); + let mut vector = Vec::with_capacity(lower.saturating_add(1)); unsafe { ptr::write(vector.get_unchecked_mut(0), element); vector.set_len(1); @@ -1570,10 +1570,11 @@ impl Vec { let len = self.len(); if len == self.capacity() { let (lower, _) = iterator.size_hint(); - self.reserve(lower + 1); + self.reserve(lower.saturating_add(1)); } unsafe { ptr::write(self.get_unchecked_mut(len), element); + // NB can't overflow since we would have had to alloc the address space self.set_len(len + 1); } }