aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2010-06-24 09:42:34 +0000
committerMåns Rullgård <mans@mansr.com>2010-06-24 09:42:34 +0000
commitdd93649b7160eb0a15cebddb2a46e1ba82437387 (patch)
treee5d3e0e8714cfc8a6fada16b10860e1a8d403269
parent796cea09b651e74a0efd162983036524a66d7791 (diff)
downloadffmpeg-dd93649b7160eb0a15cebddb2a46e1ba82437387.tar.gz
Remove VLA in ff_kbd_window_init, limit window size to 1024
Originally committed as revision 23755 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/fft.h7
-rw-r--r--libavcodec/mdct.c4
2 files changed, 9 insertions, 2 deletions
diff --git a/libavcodec/fft.h b/libavcodec/fft.h
index 1f5b2e86da..10ca1b140e 100644
--- a/libavcodec/fft.h
+++ b/libavcodec/fft.h
@@ -151,10 +151,15 @@ static inline void ff_mdct_calc(FFTContext *s, FFTSample *output,
}
/**
+ * Maximum window size for ff_kbd_window_init.
+ */
+#define FF_KBD_WINDOW_MAX 1024
+
+/**
* Generate a Kaiser-Bessel Derived Window.
* @param window pointer to half window
* @param alpha determines window shape
- * @param n size of half window
+ * @param n size of half window, max FF_KBD_WINDOW_MAX
*/
void ff_kbd_window_init(float *window, float alpha, int n);
diff --git a/libavcodec/mdct.c b/libavcodec/mdct.c
index 69e1bbff22..c511188d22 100644
--- a/libavcodec/mdct.c
+++ b/libavcodec/mdct.c
@@ -36,9 +36,11 @@ av_cold void ff_kbd_window_init(float *window, float alpha, int n)
{
int i, j;
double sum = 0.0, bessel, tmp;
- double local_window[n];
+ double local_window[FF_KBD_WINDOW_MAX];
double alpha2 = (alpha * M_PI / n) * (alpha * M_PI / n);
+ assert(n <= FF_KBD_WINDOW_MAX);
+
for (i = 0; i < n; i++) {
tmp = i * (n - i) * alpha2;
bessel = 1.0;