]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Fix infinite loop with size==0 && sample_size!=0 in non interleaved avis.
authormichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 22 Oct 2009 18:43:08 +0000 (18:43 +0000)
committermichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Thu, 22 Oct 2009 18:43:08 +0000 (18:43 +0000)
Untested, i do not have a sample.

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@20348 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavformat/avidec.c

index 37d15c2e7dcfcd2534e5b61fb86c6907730c486a..5be93949f775d7daa0072cb3b2505753b136fa2b 100644 (file)
@@ -170,7 +170,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
 
             if(last_pos == pos || pos == base - 8)
                 avi->non_interleaved= 1;
-            if(last_pos != pos)
+            if(last_pos != pos && (len || !ast->sample_size))
                 av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0);
 
             if(ast->sample_size)
@@ -905,7 +905,7 @@ resync:
                 ast->packet_size= size + 8;
                 ast->remaining= size;
 
-                {
+                if(size || !ast->sample_size){
                     uint64_t pos= url_ftell(pb) - 8;
                     if(!st->index_entries || !st->nb_index_entries || st->index_entries[st->nb_index_entries - 1].pos < pos){
                         av_add_index_entry(st, pos, ast->frame_offset, size, 0, AVINDEX_KEYFRAME);
@@ -964,7 +964,7 @@ static int avi_read_idx1(AVFormatContext *s, int size)
 
         if(last_pos == pos)
             avi->non_interleaved= 1;
-        else
+        else if(len || !ast->sample_size)
             av_add_index_entry(st, pos, ast->cum_len, len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
         if(ast->sample_size)
             ast->cum_len += len;