summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/faad/gstfaad.c10
-rw-r--r--ext/faad/gstfaad.h4
3 files changed, 21 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2a9b5aa4..0242b945 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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