]> git.sesse.net Git - vlc/commitdiff
demux: avi: improve broken index offset heuristic (fix #14120)
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 23 Mar 2015 22:38:12 +0000 (23:38 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 23 Mar 2015 22:43:16 +0000 (23:43 +0100)
Avoids using movi position as offset when the broken index refers
to beginning of file and the first sample size is exactly movi's
offset.

modules/demux/avi/avi.c

index 0a35b42269fd18019a9c659afca604f6d1358b96..34a33621814b7c32b7006873d9488ca31b7ec827 100644 (file)
@@ -2321,11 +2321,22 @@ static int AVI_IndexFind_idx1( demux_t *p_demux,
             *pi_offset = 0;
         else
             *pi_offset = i_movi_content;
+
+        if( p_idx1->i_entry_count )
+        {
+            /* Invalidate offset if index refers past the data section to avoid false
+               positives when the offset equals sample size */
+            size_t i_dataend = *pi_offset + p_idx1->entry[p_idx1->i_entry_count - 1].i_pos +
+                                            p_idx1->entry[p_idx1->i_entry_count - 1].i_length;
+            if( i_dataend > p_movi->i_chunk_pos + p_movi->i_chunk_size )
+                *pi_offset = 0;
+        }
     }
     else
     {
         *pi_offset = 0;
     }
+
     return VLC_SUCCESS;
 }