diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | ext/faad/gstfaad.c | 10 | ||||
-rw-r--r-- | ext/faad/gstfaad.h | 4 |
3 files changed, 21 insertions, 1 deletions
@@ -1,3 +1,11 @@ +2008-03-18 Andy Wingo <wingo@pobox.com> + + * ext/faad/gstfaad.c (gst_faad_chain): Fix a bad format argument, + and a potential int overflow. + + * ext/faad/gstfaad.h: Include <neaacdec.h> if faad is neaac. + Avoids a #warning about an ignored #pragma. + 2008-03-17 Zaheer Abbas Merali <zaheerabbas at merali dot org> * examples/switch/switcher.c: diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c index 1ddaf28f..0d482310 100644 --- a/ext/faad/gstfaad.c +++ b/ext/faad/gstfaad.c @@ -1337,12 +1337,20 @@ gst_faad_chain (GstPad * pad, GstBuffer * buffer) } } + if (info.samples > G_MAXUINT / faad->bps) { + /* C's lovely propensity for int overflow.. */ + GST_ELEMENT_ERROR (faad, STREAM, DECODE, (NULL), + ("Output buffer too large")); + ret = GST_FLOW_ERROR; + goto out; + } + /* play decoded data */ if (info.samples > 0) { guint bufsize = info.samples * faad->bps; guint num_samples = info.samples / faad->channels; - GST_DEBUG_OBJECT (faad, "decoded %d samples", info.samples); + GST_DEBUG_OBJECT (faad, "decoded %d samples", (guint) info.samples); /* note: info.samples is total samples, not per channel */ ret = diff --git a/ext/faad/gstfaad.h b/ext/faad/gstfaad.h index 4297e985..7c20a01f 100644 --- a/ext/faad/gstfaad.h +++ b/ext/faad/gstfaad.h @@ -21,7 +21,11 @@ #define __GST_FAAD_H__ #include <gst/gst.h> +#ifdef FAAD_IS_NEAAC +#include <neaacdec.h> +#else #include <faad.h> +#endif G_BEGIN_DECLS |