|
} else if A::may_have_side_effect() && self.index < self.a.size() { |
|
let i = self.index; |
|
self.index += 1; |
|
// match the base implementation's potential side effects |
|
// SAFETY: we just checked that `i` < `self.a.len()` |
|
unsafe { |
|
self.a.__iterator_get_unchecked(i); |
|
} |
|
None |
|
#[inline] |
|
fn size_hint(&self) -> (usize, Option<usize>) { |
|
let len = self.len - self.index; |
|
(len, Some(len)) |
|
} |
self.index can be set to a value greater than self.len in this branch. This causes integer overflow in size_hint() and lead to a buffer overflow.
Playground Link that demonstrates segfault with safe Rust code.
rust/library/core/src/iter/adapters/zip.rs
Lines 200 to 208 in 0148b97
rust/library/core/src/iter/adapters/zip.rs
Lines 214 to 218 in 0148b97
self.indexcan be set to a value greater thanself.lenin this branch. This causes integer overflow insize_hint()and lead to a buffer overflow.Playground Link that demonstrates segfault with safe Rust code.