diff --git a/src/rust/src/decoder/service_decoder.rs b/src/rust/src/decoder/service_decoder.rs index 6b9019b63..cc82ba5e4 100644 --- a/src/rust/src/decoder/service_decoder.rs +++ b/src/rust/src/decoder/service_decoder.rs @@ -262,6 +262,13 @@ impl dtvcc_service_decoder { warn!("dtvcc_process_p16: Window has to be defined first"); return; } + if block.len() < 2 { + warn!( + "dtvcc_process_p16: needs 2 data bytes but block only has {}; skipping", + block.len() + ); + return; + } let sym = dtvcc_symbol::new_16(block[0], block[1]); debug!("dtvcc_process_p16: [{:4X}]", sym.sym); self.process_character(sym); @@ -1495,6 +1502,16 @@ mod test { cleanup_test_decoder(&mut decoder); } + #[test] + fn test_process_p16_insufficient_bytes() { + let mut decoder = setup_test_decoder_with_memory(); + + decoder.process_p16(&[]); + decoder.process_p16(&[b'a']); + + cleanup_test_decoder(&mut decoder); + } + // -------------------------- C1 Commands------------------------- #[test] fn test_handle_display_windows() {