skip INDX chunks
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 3 Jan 2005 02:52:11 +0000 (02:52 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 3 Jan 2005 02:52:11 +0000 (02:52 +0000)
Originally committed as revision 3796 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/rm.c

index f08a658..54ffa02 100644 (file)
@@ -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;