diff --git a/src/filters.rs b/src/filters.rs index 54b9bb63..f370778b 100644 --- a/src/filters.rs +++ b/src/filters.rs @@ -63,7 +63,7 @@ pub fn filter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8], buf: & } pub fn unfilter_line(filter: u8, bpp: usize, data: &[u8], last_line: &[u8], buf: &mut Vec) { - assert_eq!(buf.len(), 0); + buf.clear(); buf.reserve(data.len()); match filter { 0 => { diff --git a/src/reduction/alpha.rs b/src/reduction/alpha.rs index cd25a81a..9190672b 100644 --- a/src/reduction/alpha.rs +++ b/src/reduction/alpha.rs @@ -185,7 +185,9 @@ pub fn reduced_alpha_channel(png: &PngImage) -> Option { let channels = png.channels_per_pixel(); let bpp = channels * byte_depth; let bpp_mask = bpp - 1; - assert_eq!(0, bpp & bpp_mask); + if 0 != bpp & bpp_mask { + return None; + } let colored_bytes = bpp - byte_depth; for line in png.scan_lines() { for (i, &byte) in line.data.iter().enumerate() { diff --git a/src/reduction/color.rs b/src/reduction/color.rs index 8be17402..b7c07512 100644 --- a/src/reduction/color.rs +++ b/src/reduction/color.rs @@ -12,7 +12,9 @@ pub fn reduce_rgba_to_grayscale_alpha(png: &PngImage) -> Option { let byte_depth = png.ihdr.bit_depth.as_u8() >> 3; let bpp = 4 * byte_depth; let bpp_mask = bpp - 1; - assert_eq!(0, bpp & bpp_mask); + if 0 != bpp & bpp_mask { + return None; + } let colored_bytes = bpp - byte_depth; for line in png.scan_lines() { reduced.push(line.filter); @@ -157,7 +159,10 @@ pub fn reduced_color_to_palette(png: &PngImage) -> Option { let mut aux_headers = png.aux_headers.clone(); if let Some(bkgd_header) = png.aux_headers.get(b"bKGD") { - assert_eq!(bkgd_header.len(), 6); + if bkgd_header.len() != 6 { + // malformed chunk? + return None; + } // In bKGD 16-bit values are used even for 8-bit images let bg = RGBA8::new(bkgd_header[1], bkgd_header[3], bkgd_header[5], 255); let entry = if let Some(&entry) = palette.get(&bg) {