]> git.lizzy.rs Git - rust.git/blobdiff - src/range_map.rs
Auto merge of #2426 - saethlin:unix-exec, r=RalfJung
[rust.git] / src / range_map.rs
index f0507ffabad0c3546b5b1eec3f3cdfb5472958bc..c77ea63b0873f1eb3f83c338e10e158129ca6cca 100644 (file)
@@ -77,6 +77,10 @@ pub fn iter(&self, offset: Size, len: Size) -> impl Iterator<Item = (Size, &T)>
         };
         // The first offset that is not included any more.
         let end = offset + len;
+        assert!(
+            end <= self.v.last().unwrap().range.end,
+            "iterating beyond the bounds of this RangeMap"
+        );
         slice
             .iter()
             .take_while(move |elem| elem.range.start < end)
@@ -110,7 +114,7 @@ fn split_index(&mut self, index: usize, split_offset: u64) -> bool
         // Copy the data, and insert second element.
         let second = Elem { range: second_range, data: elem.data.clone() };
         self.v.insert(index + 1, second);
-        return true;
+        true
     }
 
     /// Provides mutable iteration over everything in the given range. As a side-effect,
@@ -279,4 +283,18 @@ fn gaps() {
         assert_eq!(map.v.len(), 5);
         assert_eq!(to_vec(&map, 10, 10), vec![23, 42, 23, 23, 23, 19, 19, 19, 19, 19]);
     }
+
+    #[test]
+    #[should_panic]
+    fn out_of_range_iter_mut() {
+        let mut map = RangeMap::<i32>::new(Size::from_bytes(20), -1);
+        let _ = map.iter_mut(Size::from_bytes(11), Size::from_bytes(11));
+    }
+
+    #[test]
+    #[should_panic]
+    fn out_of_range_iter() {
+        let map = RangeMap::<i32>::new(Size::from_bytes(20), -1);
+        let _ = map.iter(Size::from_bytes(11), Size::from_bytes(11));
+    }
 }