From a80f16883256a2576b2b29ee726d2e37eab910df Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 16 Jul 2006 14:46:02 +0000 Subject: ext/faad/gstfaad.c: Don't crash on small buffers. Original commit message from CVS: * ext/faad/gstfaad.c: (gst_faad_setcaps), (gst_faad_sync): Don't crash on small buffers. --- ext/faad/gstfaad.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'ext/faad/gstfaad.c') diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c index f7a06ece..dda21e95 100644 --- a/ext/faad/gstfaad.c +++ b/ext/faad/gstfaad.c @@ -299,10 +299,8 @@ gst_faad_setcaps (GstPad * pad, GstCaps * caps) /* someone forgot that char can be unsigned when writing the API */ if ((gint8) faacDecInit2 (faad->handle, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), &samplerate, - &channels) < 0) { - GST_DEBUG ("faacDecInit2() failed"); - return FALSE; - } + &channels) < 0) + goto init_failed; GST_DEBUG_OBJECT (faad, "channels=%u, rate=%u", channels, samplerate); @@ -351,6 +349,13 @@ gst_faad_setcaps (GstPad * pad, GstCaps * caps) gst_faad_send_tags (faad); return TRUE; + + /* ERRORS */ +init_failed: + { + GST_DEBUG_OBJECT (faad, "faacDecInit2() failed"); + return FALSE; + } } @@ -1033,6 +1038,10 @@ gst_faad_sync (GstBuffer * buf, guint * off) GST_DEBUG ("Finding syncpoint"); + /* check for too small a buffer */ + if (size < 3) + return FALSE; + /* FIXME: for no-sync, we go over the same data for every new buffer. * We should save the information somewhere. */ for (n = 0; n < size - 3; n++) { -- cgit v1.2.1