From: Ian Jackson Date: Sat, 21 Nov 2020 13:10:11 +0000 (+0000) Subject: zcoord: fix crash with empty iters X-Git-Tag: otter-0.2.0~435 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=260837f7f9f44e58b2d44365d33d58fa023858ff;p=otter.git zcoord: fix crash with empty iters Signed-off-by: Ian Jackson --- diff --git a/zcoord/zcoord.rs b/zcoord/zcoord.rs index 28d18236..745e4ec9 100644 --- a/zcoord/zcoord.rs +++ b/zcoord/zcoord.rs @@ -68,6 +68,7 @@ use std::cmp::{Ordering, max}; use std::convert::{TryFrom, TryInto}; use std::fmt::{self, Debug, Display, Formatter}; +use std::iter; use std::num::{TryFromIntError, Wrapping}; use std::str; use std::str::FromStr; @@ -471,6 +472,7 @@ impl Mutable { fn mk>(x: T) -> BoxedIterator { Box::new(x) } let c = count as usize; + if c == 0 { return mk( iter::empty() ) } match (a, b) { (None, None ) => throw!(TotallyUnboundedRange), (Some(a), None ) => mk( a.clone().iter(Increment).take(c) ), @@ -926,5 +928,10 @@ mod test { assert_eq!( x.err(), Some( LogicError::RangeTotallyUnbounded(TotallyUnboundedRange) )); + let mut it = mkr(Some("fvvq000000"),Some("g026000000"),1).unwrap(); + it.nxt(Some("g010000000")); + it.nxt(None); + let mut it = mkr(None,Some("fvvq000000"),0).unwrap(); + it.nxt(None); } }