From a1a9326c6d71cb7f3b678f4047a1e958318dd337 Mon Sep 17 00:00:00 2001 From: gifnksm Date: Sat, 20 Apr 2013 10:44:32 +0900 Subject: [PATCH] libcore: Fix assertion failure in vec::windowe. vec::windowed fails if given window size is greater than vector length + 1. --- src/libcore/vec.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 139fcedad277..4f2453c4d79a 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -1516,6 +1516,7 @@ pub fn each_permutation(v: &[T], put: &fn(ts: &[T]) -> bool) { #[cfg(stage0)] // XXX: lifetimes! pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { assert!(1u <= n); + if n > v.len() { return; } for uint::range(0, v.len() - n + 1) |i| { if !it(v.slice(i, i+n)) { return } } @@ -1525,6 +1526,7 @@ pub fn windowed(n: uint, v: &[T], it: &fn(&[T]) -> bool) { #[cfg(stage3)] pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) { assert!(1u <= n); + if n > v.len() { return; } for uint::range(0, v.len() - n + 1) |i| { if !it(v.slice(i, i + n)) { return } } @@ -3833,6 +3835,7 @@ mod tests { t(3, &[&[1,2,3],&[2,3,4],&[3,4,5],&[4,5,6]]); t(4, &[&[1,2,3,4],&[2,3,4,5],&[3,4,5,6]]); t(7, &[]); + t(8, &[]); } #[test]