From f5111a7ef0298f42eddc87b773ae53af68a71237 Mon Sep 17 00:00:00 2001 From: caleb Date: Mon, 29 Aug 2022 19:45:32 +0300 Subject: [PATCH] mcu_prog: Check for existence of decode tables before proceeding. Should make https://github.com/etemesi254/zune-jpeg/issues/8#issuecomment-1200440247 decode gracefully --- src/mcu_prog.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mcu_prog.rs b/src/mcu_prog.rs index 9abab74..d38dcab 100644 --- a/src/mcu_prog.rs +++ b/src/mcu_prog.rs @@ -37,6 +37,7 @@ use crate::marker::Marker; use crate::misc::read_byte; use crate::worker::post_process_prog; use crate::{ColorSpace, Decoder}; +use crate::decoder::MAX_COMPONENTS; impl Decoder { @@ -260,6 +261,7 @@ impl Decoder self.check_component_dimensions()?; stream.reset(); self.components.iter_mut().for_each(|x| x.dc_pred = 0); + self.check_tables()?; if self.num_scans == 1 { @@ -293,6 +295,7 @@ impl Decoder let mut j = 0; + while i < mcu_height { while j < mcu_width @@ -309,9 +312,9 @@ impl Decoder if self.spec_start == 0 { - let pos = self.components[k].dc_huff_table; - - let dc_table = self.dc_huffman_tables.get(pos).unwrap().as_ref().unwrap(); + let pos = self.components[k].dc_huff_table & (MAX_COMPONENTS-1); + let dc_table =self.dc_huffman_tables[pos] + .as_ref().unwrap(); let dc_pred = &mut self.components[k].dc_pred; if self.succ_high == 0