Avoid split_at panic in ScanLines

This commit is contained in:
Kornel 2024-03-26 15:09:58 +00:00 committed by andrews05
parent f4e631bce7
commit d063119d9c

View file

@ -24,7 +24,12 @@ impl<'a> Iterator for ScanLines<'a> {
type Item = ScanLine<'a>; type Item = ScanLine<'a>;
#[inline] #[inline]
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
self.iter.next().map(|(len, pass, num_pixels)| { let (len, pass, num_pixels) = self.iter.next()?;
debug_assert!(self.raw_data.len() >= len);
debug_assert!(!self.has_filter || len > 1);
if self.raw_data.len() < len {
return None;
}
let (data, rest) = self.raw_data.split_at(len); let (data, rest) = self.raw_data.split_at(len);
self.raw_data = rest; self.raw_data = rest;
let (&filter, data) = if self.has_filter { let (&filter, data) = if self.has_filter {
@ -32,12 +37,11 @@ impl<'a> Iterator for ScanLines<'a> {
} else { } else {
(&0, data) (&0, data)
}; };
ScanLine { Some(ScanLine {
filter, filter,
data, data,
pass, pass,
num_pixels, num_pixels,
}
}) })
} }
} }