diff options
| author | Alex Burka <aburka@seas.upenn.edu> | 2016-02-27 01:56:19 -0500 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2016-02-27 02:01:41 -0500 |
| commit | f27a3a304fa10c77d4e944172b27f9f0776f9847 (patch) | |
| tree | b49477d12a400c9899a9aacfc19849a0456792c5 /src/libcore | |
| parent | 1ec3005e451137e51479b77ea3ab4f45dec56ed0 (diff) | |
fix underflow in DoubleEndedIterator::next_back
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/iter.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 8cea98d2a21..64933d0acf5 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -4665,11 +4665,15 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where NonEmpty { ref mut start, ref mut end } => { let one = A::one(); - let mut n = &*end - &one; - mem::swap(&mut n, end); + if start <= end { + let mut n = &*end - &one; + mem::swap(&mut n, end); - (if n == *start { Some(mem::replace(start, one)) } else { None }, - n) + (if n == *start { Some(mem::replace(start, one)) } else { None }, + Some(n)) + } else { + (Some(mem::replace(end, one)), None) + } } }; @@ -4677,7 +4681,7 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where *self = Empty { at: start }; } - Some(n) + n } } |
