diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 8f40f88faec5ae7d36ba4b2444b36c1a0155bb42..335a2ab4d3c56ebaa25644cc92fd104d2ec0315b 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -416,8 +416,6 @@ resync:
         AVIStream *ast= st->priv_data;
         int size;
         
-        assert(ast->remaining);
-        
         if(ast->sample_size == 0)
             size= INT_MAX;
         else if(ast->sample_size < 32) 
@@ -528,7 +526,7 @@ resync:
         }
         
         //parse ##dc/##wb
-        if(n < s->nb_streams && size){
+        if(n < s->nb_streams){
           AVStream *st;
           AVIStream *ast;
           st = s->streams[n];
@@ -632,14 +630,14 @@ static int avi_read_idx1(AVFormatContext *s, int size)
 #if defined(DEBUG_SEEK)
         av_log(NULL, AV_LOG_DEBUG, "%d cum_len=%d\n", len, ast->cum_len);
 #endif
-        if(len)
+        if(last_pos == pos)
+            avi->non_interleaved= 1;
+        else
             av_add_index_entry(st, pos, ast->cum_len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
         if(ast->sample_size)
             ast->cum_len += len / ast->sample_size;
         else
             ast->cum_len ++;
-        if(last_pos == pos)
-            avi->non_interleaved= 1;
         last_pos= pos;
     }
     return 0;