Skip to content

Commit a1a9326

Browse files
committed
libcore: Fix assertion failure in vec::windowe.
vec::windowed fails if given window size is greater than vector length + 1.
1 parent 6510fd9 commit a1a9326

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

src/libcore/vec.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,6 +1516,7 @@ pub fn each_permutation<T:Copy>(v: &[T], put: &fn(ts: &[T]) -> bool) {
15161516
#[cfg(stage0)] // XXX: lifetimes!
15171517
pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
15181518
assert!(1u <= n);
1519+
if n > v.len() { return; }
15191520
for uint::range(0, v.len() - n + 1) |i| {
15201521
if !it(v.slice(i, i+n)) { return }
15211522
}
@@ -1525,6 +1526,7 @@ pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
15251526
#[cfg(stage3)]
15261527
pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) {
15271528
assert!(1u <= n);
1529+
if n > v.len() { return; }
15281530
for uint::range(0, v.len() - n + 1) |i| {
15291531
if !it(v.slice(i, i + n)) { return }
15301532
}
@@ -3833,6 +3835,7 @@ mod tests {
38333835
t(3, &[&[1,2,3],&[2,3,4],&[3,4,5],&[4,5,6]]);
38343836
t(4, &[&[1,2,3,4],&[2,3,4,5],&[3,4,5,6]]);
38353837
t(7, &[]);
3838+
t(8, &[]);
38363839
}
38373840

38383841
#[test]

0 commit comments

Comments
 (0)