qtdemux: increase parse tolerance for fuzzy file cases
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Wed, 9 Feb 2011 14:31:22 +0000 (15:31 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Mon, 12 Dec 2011 14:23:33 +0000 (15:23 +0100)
gst/isomp4/qtdemux.c

index 037f29e..14d5413 100644 (file)
@@ -5306,8 +5306,13 @@ qtdemux_stbl_init (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * stbl)
   GST_LOG_OBJECT (qtdemux, "%u timestamp blocks", stream->n_sample_times);
 
   /* make sure there's enough data */
-  if (!qt_atom_parser_has_chunks (&stream->stts, stream->n_sample_times, 2 * 4))
-    goto corrupt_file;
+  if (!qt_atom_parser_has_chunks (&stream->stts, stream->n_sample_times, 8)) {
+    stream->n_sample_times = gst_byte_reader_get_remaining (&stream->stts) / 8;
+    GST_LOG_OBJECT (qtdemux, "overriding to %u timestamp blocks",
+        stream->n_sample_times);
+    if (!stream->n_sample_times)
+      goto corrupt_file;
+  }
 
   /* sync sample atom */
   stream->stps_present = FALSE;