about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-06-25 06:00:15 +0000
committerbors <bors@rust-lang.org>2015-06-25 06:00:15 +0000
commit124d1657cc2e321a66e78e9bc5fd4e966f46da42 (patch)
tree374662fc934ffe55e102900f60ae9a6889888dd0 /src
parent23958d803e18de20564c198e1d1ec8d030d617ce (diff)
parent18e78b91de236fb216575809840de29298c79ce3 (diff)
downloadrust-124d1657cc2e321a66e78e9bc5fd4e966f46da42.tar.gz
rust-124d1657cc2e321a66e78e9bc5fd4e966f46da42.zip
Auto merge of #26563 - sfackler:vec-from-iter-overflow, r=Gankro
Closes #26550
Diffstat (limited to 'src')
-rw-r--r--src/libcollections/vec.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs
index 54528c50f1d..3aac1829a0c 100644
--- a/src/libcollections/vec.rs
+++ b/src/libcollections/vec.rs
@@ -1482,7 +1482,7 @@ impl<T> FromIterator<T> for Vec<T> {
             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<T> Vec<T> {
             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);
             }
         }