asfdemux: Parse last simple index entry
authorThiago Santos <ts.santos@partner.samsung.com>
Tue, 24 Sep 2013 17:07:25 +0000 (10:07 -0700)
committerThiago Santos <ts.santos@partner.samsung.com>
Tue, 24 Sep 2013 21:43:34 +0000 (14:43 -0700)
The entry size is fixed at 6, fix typo to finish parsing the index
correctly until the last sample

gst/asfdemux/gstasfdemux.c

index ec44035fa0b2a1bfef625a494f2216e0e363c4dd..0432503a07a388e82564290efcdb534c83fbdb48 100644 (file)
@@ -3571,8 +3571,13 @@ gst_asf_demux_process_simple_index (GstASFDemux * demux, guint8 * data,
     demux->sidx_entries = g_new0 (AsfSimpleIndexEntry, count);
 
     for (i = 0; i < count; ++i) {
-      if (G_UNLIKELY (size <= 6))
+      if (G_UNLIKELY (size < 6)) {
+        /* adjust for broken files, to avoid having entries at the end
+         * of the parsed index that point to time=0. Resulting in seeking to
+         * the end of the file leading back to the beginning */
+        demux->sidx_num_entries -= (count - i);
         break;
+      }
       demux->sidx_entries[i].packet = gst_asf_demux_get_uint32 (&data, &size);
       demux->sidx_entries[i].count = gst_asf_demux_get_uint16 (&data, &size);
       GST_LOG_OBJECT (demux, "%" GST_TIME_FORMAT " = packet %4u  count : %2d",