assert!(dest <= self.len() - count, "dest is out of bounds");
unsafe {
ptr::copy(
- self.get_unchecked(src_start),
- self.get_unchecked_mut(dest),
+ self.as_ptr().add(src_start),
+ self.as_mut_ptr().add(dest),
count,
);
}
let mut bytes = *b"Hello, World!";
bytes.copy_within(.., 0);
assert_eq!(&bytes, b"Hello, World!");
+
+ // Ensure that copying at the end of slice won't cause UB.
+ let mut bytes = *b"Hello, World!";
+ bytes.copy_within(13..13, 5);
+ assert_eq!(&bytes, b"Hello, World!");
+ bytes.copy_within(5..5, 13);
+ assert_eq!(&bytes, b"Hello, World!");
}
#[test]
// 2 is greater than 1, so this range is invalid.
bytes.copy_within(2..1, 0);
}
+#[test]
+#[should_panic(expected = "attempted to index slice up to maximum usize")]
+fn test_copy_within_panics_src_out_of_bounds() {
+ let mut bytes = *b"Hello, World!";
+ // 2 is greater than 1, so this range is invalid.
+ bytes.copy_within(usize::max_value()..=usize::max_value(), 0);
+}
#[test]
fn test_is_sorted() {