about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTommy M. McGuire <mcguire@crsr.net>2013-03-01 17:06:37 -0600
committerCorey Richardson <corey@octayn.net>2013-05-16 20:59:06 -0400
commit5948d8a8260e0c3da4f58f7bd1081add1fd63e58 (patch)
treed909ebda288beda06fb7be820a0ae0a454eb310c
parent2264c7927dbfc6124b9b756de47200ded1ca76ac (diff)
downloadrust-5948d8a8260e0c3da4f58f7bd1081add1fd63e58.tar.gz
rust-5948d8a8260e0c3da4f58f7bd1081add1fd63e58.zip
Ensure reverse_part does not access outside given vector
-rw-r--r--src/libcore/vec.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs
index 764e329a0aa..21d12e9d1a4 100644
--- a/src/libcore/vec.rs
+++ b/src/libcore/vec.rs
@@ -1450,6 +1450,9 @@ pub fn reverse<T>(v: &mut [T]) {
  *
  * Reverse the elements in the vector between `start` and `end - 1`.
  *
+ * If either start or end do not represent valid positions in the vector, the
+ * vector is returned unchanged.
+ *
  * # Arguments
  *
  * * `v` - The mutable vector to be modified
@@ -1469,13 +1472,10 @@ pub fn reverse<T>(v: &mut [T]) {
  * ~~~
  *
  * `v` now contains `[1,4,3,2,5]`.
- *
- * # Safety note
- *
- * Behavior is undefined if `start` or `end` do not represent valid
- * positions in `v`.
  */
 pub fn reverse_part<T>(v: &mut [T], start: uint, end : uint) {
+    let sz = v.len();
+    if start >= sz || end > sz { return; }
     let mut i = start;
     let mut j = end - 1;
     while i < j {