From 4a810182f5292509d22786ce3bb01c98094e470d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Tue, 11 Dec 2007 10:16:32 +0000 Subject: [PATCH] Check CRC in software for DVB as well. (Seems kernel / hw doesnt always do this) --- dvb_tables.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dvb_tables.c b/dvb_tables.c index 45bacd69..c6dd41d9 100644 --- a/dvb_tables.c +++ b/dvb_tables.c @@ -78,8 +78,13 @@ dvb_table_recv(int events, void *opaque, int fd) if(r < 3) return; - r -= 3; + /* It seems some hardware (or is it the dvb API?) does not honour the + DMX_CHECK_CRC flag, so we check it again */ + if(psi_crc32(sec, r)) + return; + + r -= 3; tableid = sec[0]; len = ((sec[1] & 0x0f) << 8) | sec[2]; @@ -87,7 +92,8 @@ dvb_table_recv(int events, void *opaque, int fd) return; ptr = &sec[3]; - len -= 3; + len -= 4; /* Strip trailing CRC */ + if(!tdt->tdt_callback(tdt->tdt_tdmi, ptr, len, tableid, tdt->tdt_opaque)) tdt->tdt_count++;