From 603b409c33ecc45e2e9b42e368ada98ff0c14d94 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 18 Mar 2008 10:12:40 +0000 Subject: ext/faad/gstfaad.c (gst_faad_chain): Fix a bad format argument, and a potential int overflow. Original commit message from CVS: 2008-03-18 Andy Wingo * ext/faad/gstfaad.c (gst_faad_chain): Fix a bad format argument, and a potential int overflow. * ext/faad/gstfaad.h: Include if faad is neaac. Avoids a #warning about an ignored #pragma. --- ext/faad/gstfaad.c | 10 +++++++++- ext/faad/gstfaad.h | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'ext/faad') 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 +#ifdef FAAD_IS_NEAAC +#include +#else #include +#endif G_BEGIN_DECLS -- cgit v1.2.1