From 119cebf42965bd28c74c2e99ba16c286c55c76df Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 3 Jan 2005 02:52:11 +0000 Subject: skip INDX chunks Originally committed as revision 3796 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rm.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libavformat/rm.c b/libavformat/rm.c index f08a658219..54ffa028d8 100644 --- a/libavformat/rm.c +++ b/libavformat/rm.c @@ -731,6 +731,7 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_ ByteIOContext *pb = &s->pb; int len, num, res, i; AVStream *st; + uint32_t state=0xFFFFFFFF; while(!url_feof(pb)){ *pos= url_ftell(pb); @@ -740,13 +741,20 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_ *timestamp = AV_NOPTS_VALUE; *flags= 0; }else{ - if(get_byte(pb)) - continue; - if(get_byte(pb)) - continue; - len = get_be16(pb); - if (len < 12) + state= (state<<8) + get_byte(pb); + + if(state == MKBETAG('I', 'N', 'D', 'X')){ + len = get_be16(pb) - 6; + if(len<0) + continue; + goto skip; + } + + if(state > (unsigned)0xFFFF || state < 12) continue; + len=state; + state= 0xFFFFFFFF; + num = get_be16(pb); *timestamp = get_be32(pb); res= get_byte(pb); /* reserved */ @@ -761,6 +769,7 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_ break; } if (i == s->nb_streams) { +skip: /* skip packet if unknown number */ url_fskip(pb, len); rm->remaining_len -= len; -- cgit v1.2.3