From 5850f0b742430a1b1b5ae7d2491dce6ca10e20d3 Mon Sep 17 00:00:00 2001 From: oberien Date: Fri, 19 Jan 2018 14:55:20 +0100 Subject: [PATCH] Fix off-by-ones --- src/libcore/iter/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs index 443b1567e1b4..33c00989fd28 100644 --- a/src/libcore/iter/mod.rs +++ b/src/libcore/iter/mod.rs @@ -698,13 +698,16 @@ impl Iterator for StepBy where I: Iterator { #[inline] fn nth(&mut self, mut n: usize) -> Option { if self.first_take { + self.first_take = false; + let first = self.iter.next(); if n == 0 { - self.first_take = false; - return self.iter.next() + return first; } n -= 1; } - self.iter.nth(n * self.step) + // n and self.step are indices, thus we need to add 1 before multiplying. + // After that we need to subtract 1 from the result to convert it back to an index. + self.iter.nth((n + 1) * (self.step + 1) - 1) } }