summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-12-18 19:36:59 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-12-18 19:36:59 +0000
commita4bf15581731ea75ce1ff5f156779580e685bff1 (patch)
tree493997cf777242c9745d886d3e6bcbe799eedb02 /gst/avi/gstavidemux.c
parent9d418cd3b9e0bd3ce25c6ec12e71af14122fbc92 (diff)
gst/avi/gstavidemux.c: Work for truncated (unfinished download etc.) files. Fixes #160514.
Original commit message from CVS: * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index): Work for truncated (unfinished download etc.) files. Fixes #160514.
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 367e4b32..83671772 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -1198,17 +1198,29 @@ gst_avi_demux_stream_index (GstAviDemux * avi,
pos_before = gst_bytestream_tell (riff->bs);
/* skip movi
- *
- * FIXME:
- * - we want to add error handling here so we can recover.
*/
+ if (pos_before + 8 > length) {
+ return TRUE;
+ } else {
+ guint8 *data;
+
+ if (gst_bytestream_peek_bytes (riff->bs, &data, 8) == 8) {
+ guint len = GST_READ_UINT32_LE (&data[4]);
+
+ if (pos_before + 8 + len >= length) {
+ GST_WARNING ("No index avail");
+ return TRUE;
+ }
+ }
+ }
+ /* hmm... */
if (!gst_riff_read_skip (riff))
return FALSE;
/* assure that we've got data left */
pos_after = gst_bytestream_tell (riff->bs);
if (pos_after + 8 > length) {
- g_warning ("File said that it has an index, but there is no index data!");
+ GST_WARNING ("File said that it has an index, but there is no index data!");
goto end;
}