if (seclen <= 0 || seclen > DMX_MAX_SECFEED_SIZE
if (seclen <= 0 || seclen > DMX_MAX_SECTION_SIZE
static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed,					      const u8 *buf, u8 len){	struct dvb_demux *demux = feed->demux;	struct dmx_section_feed *sec = &feed->feed.sec;	u16 limit, seclen, n;	if (sec->tsfeedp >= DMX_MAX_SECFEED_SIZE)		return 0;	if (sec->tsfeedp + len > DMX_MAX_SECFEED_SIZE) {#ifdef DVB_DEMUX_SECTION_LOSS_LOG		printk("dvb_demux.c section buffer full loss: %d/%d\n",		       sec->tsfeedp + len - DMX_MAX_SECFEED_SIZE,		       DMX_MAX_SECFEED_SIZE);#endif		len = DMX_MAX_SECFEED_SIZE - sec->tsfeedp;	}	if (len <= 0)		return 0;	demux->memcopy(feed, sec->secbuf_base + sec->tsfeedp, buf, len);	sec->tsfeedp += len;	/*	 * Dump all the sections we can find in the data (Emard)	 */	limit = sec->tsfeedp;	if (limit > DMX_MAX_SECFEED_SIZE)		return -1;	/* internal error should never happen */	/* to be sure always set secbuf */	sec->secbuf = sec->secbuf_base + sec->secbufp;	for (n = 0; sec->secbufp + 2 < limit; n++) {		seclen = section_length(sec->secbuf);		if (seclen <= 0 || seclen > DMX_MAX_SECFEED_SIZE		    || seclen + sec->secbufp > limit)			return 0;		sec->seclen = seclen;		sec->crc_val = ~0;		/* dump [secbuf .. secbuf+seclen) */		if (feed->pusi_seen)			dvb_dmx_swfilter_section_feed(feed);#ifdef DVB_DEMUX_SECTION_LOSS_LOG		else			printk("dvb_demux.c pusi not seen, discarding section data\n");#endif		sec->secbufp += seclen;	/* secbufp and secbuf moving together is */		sec->secbuf += seclen;	/* redundant but saves pointer arithmetic */	}	return 0;}