From 381489f82c8d7a642aac317d3fb8fe1fa698212e Mon Sep 17 00:00:00 2001 From: Pranav Sharma Date: Fri, 20 Feb 2026 10:03:50 +0000 Subject: [PATCH] Fix: Add missing SCTE-20 marker bit syntax check (resolves TODO) --- src/lib_ccx/es_userdata.c | 8 +++++++- src/rust/src/es/userdata.rs | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib_ccx/es_userdata.c b/src/lib_ccx/es_userdata.c index 87e1cfcef..9ad350a9d 100644 --- a/src/lib_ccx/es_userdata.c +++ b/src/lib_ccx/es_userdata.c @@ -161,11 +161,17 @@ int user_data(struct encoder_ctx *enc_ctx, struct lib_cc_decode *dec_ctx, struct skip_bits(ustream, 5); // line_offset - unused cc_data1 = (unsigned int)read_bits(ustream, 8); cc_data2 = (unsigned int)read_bits(ustream, 8); - read_bits(ustream, 1); // TODO: Add syntax check */ + unsigned char marker_bit = read_bits(ustream, 1); if (ustream->bitsleft < 0) fatal(CCX_COMMON_EXIT_BUG_BUG, "In user_data: ustream->bitsleft < 0. Cannot continue."); + if (marker_bit == 0) + { + dbg_print(CCX_DMT_VERBOSE, "user_data: SCTE-20 syntax error - marker bit is 0\n"); + continue; // Skip processing this corrupted block + } + // Field_number is either // 0 .. forbidden // 1 .. field 1 (odd) diff --git a/src/rust/src/es/userdata.rs b/src/rust/src/es/userdata.rs index 1e2534ccc..a5db29169 100644 --- a/src/rust/src/es/userdata.rs +++ b/src/rust/src/es/userdata.rs @@ -180,10 +180,14 @@ pub unsafe fn user_data( ustream.skip_bits(5)?; // line_offset - unused let cc_data1 = ustream.read_bits(8)? as u32; let cc_data2 = ustream.read_bits(8)? as u32; - ustream.read_bits(1)?; // TODO: Add syntax check */ + let marker_bit = ustream.read_bits(1)?; if ustream.bits_left < 0 { fatal!(cause = ExitCause::Bug; "In user_data: ustream->bitsleft < 0. Cannot continue."); } + if marker_bit == 0 { + debug!(msg_type = DebugMessageFlag::VERBOSE; "user_data: SCTE-20 syntax error - marker bit is 0"); + continue; // Skip processing this corrupted block + } // Field_number is either // 0 .. forbidden