diff options
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dvb_demux.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_demux.c b/linux/drivers/media/dvb/dvb-core/dvb_demux.c index 586a88f5b..29108599d 100644 --- a/linux/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.c @@ -190,6 +190,7 @@ static inline int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) struct dvb_demux_filter *f = feed->filter; struct dmx_section_feed *sec = &feed->feed.sec; u8 *buf = sec->secbuf; + int section_syntax_indicator; if (sec->secbufp != sec->seclen) return -1; @@ -200,8 +201,12 @@ static inline int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) if (!f) return 0; - if (sec->check_crc && demux->check_crc32(feed, sec->secbuf, sec->seclen)) - return -1; + if (sec->check_crc) { + section_syntax_indicator = ((sec->secbuf[1] & 0x80) != 0); + if (section_syntax_indicator && + demux->check_crc32(feed, sec->secbuf, sec->seclen)) + return -1; + } do { if (dvb_dmx_swfilter_sectionfilter(feed, f) < 0) |