Avoid split_at panic in ScanLines
This commit is contained in:
parent
f4e631bce7
commit
d063119d9c
1 changed files with 18 additions and 14 deletions
|
|
@ -24,20 +24,24 @@ impl<'a> Iterator for ScanLines<'a> {
|
|||
type Item = ScanLine<'a>;
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
self.iter.next().map(|(len, pass, num_pixels)| {
|
||||
let (data, rest) = self.raw_data.split_at(len);
|
||||
self.raw_data = rest;
|
||||
let (&filter, data) = if self.has_filter {
|
||||
data.split_first().unwrap()
|
||||
} else {
|
||||
(&0, data)
|
||||
};
|
||||
ScanLine {
|
||||
filter,
|
||||
data,
|
||||
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);
|
||||
self.raw_data = rest;
|
||||
let (&filter, data) = if self.has_filter {
|
||||
data.split_first().unwrap()
|
||||
} else {
|
||||
(&0, data)
|
||||
};
|
||||
Some(ScanLine {
|
||||
filter,
|
||||
data,
|
||||
pass,
|
||||
num_pixels,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue