ext/ogg/gstoggdemux.c: Error out properly if we get an error from libogg while readin...
authorTim-Philipp Müller <tim@centricular.net>
Tue, 23 Jan 2007 18:39:45 +0000 (18:39 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Tue, 23 Jan 2007 18:39:45 +0000 (18:39 +0000)
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain):
Error out properly if we get an error from libogg while reading the
BOS page(s). Fixes crash parsing 'fuzzed' ogg file (#399340).

ChangeLog
ext/ogg/gstoggdemux.c

index b720cd3..ef08417 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-01-23  Tim-Philipp Müller  <tim at centricular dot net>
 
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain):
+         Error out properly if we get an error from libogg while reading the
+         BOS page(s). Fixes crash parsing 'fuzzed' ogg file (#399340).
+
+2007-01-23  Tim-Philipp Müller  <tim at centricular dot net>
+
        * gst/playback/gstdecodebin2.c: (gst_decode_bin_finalize):
          Don't leak mutex.
 
index 3c31a77..55a0331 100644 (file)
@@ -2269,7 +2269,16 @@ gst_ogg_demux_read_chain (GstOggDemux * ogg)
     gint ret;
 
     ret = gst_ogg_demux_get_next_page (ogg, &op, -1);
-    if (ret < 0 || !ogg_page_bos (&op))
+    if (ret < 0) {
+      GST_WARNING_OBJECT (ogg, "problem reading BOS page: ret=%d", ret);
+      if (chain) {
+        gst_ogg_chain_free (chain);
+        chain = NULL;
+      }
+      break;
+    }
+
+    if (!ogg_page_bos (&op))
       break;
 
     if (chain == NULL) {