diff --git a/ChangeLog b/ChangeLog index 2a9b5aa426..0242b945d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +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. + 2008-03-17 Zaheer Abbas Merali * examples/switch/switcher.c: diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c index 1ddaf28f30..0d48231038 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 4297e9859a..7c20a01f4a 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