about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-08-04 22:46:26 +0200
committerblake2-ppc <blake2-ppc>2013-08-06 04:05:08 +0200
commit45085b9f8dc70f3b24eb9317b2d6bb2911ffb0a6 (patch)
tree26965865beb862265202003a75dd349b9897cfb1 /src/libstd
parentea9c5c405ecea256721c6d65b7de21bffe21056b (diff)
downloadrust-45085b9f8dc70f3b24eb9317b2d6bb2911ffb0a6.tar.gz
rust-45085b9f8dc70f3b24eb9317b2d6bb2911ffb0a6.zip
std: Fix bug in ChunkIter::idx
ChunkIter .idx() didn't handle overflow correctly, even though it tried.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/vec.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs
index fa1291c61e1..0259b547ab3 100644
--- a/src/libstd/vec.rs
+++ b/src/libstd/vec.rs
@@ -547,7 +547,10 @@ impl<'self, T> RandomAccessIterator<&'self [T]> for ChunkIter<'self, T> {
     fn idx(&self, index: uint) -> Option<&'self [T]> {
         if index < self.indexable() {
             let lo = index * self.size;
-            Some(self.v.slice(lo, cmp::min(lo, self.v.len() - self.size) + self.size))
+            let mut hi = lo + self.size;
+            if hi < lo || hi > self.v.len() { hi = self.v.len(); }
+
+            Some(self.v.slice(lo, hi))
         } else {
             None
         }