diff --git a/libavcodec/kbdwin.c b/libavcodec/kbdwin.c index 163f9d5251..82755874d4 100644 --- a/libavcodec/kbdwin.c +++ b/libavcodec/kbdwin.c @@ -19,20 +19,23 @@ #include "libavutil/avassert.h" #include "libavutil/mathematics.h" #include "libavutil/attributes.h" +#include "libavutil/mem.h" #include "kbdwin.h" -av_cold static void kbd_window_init(float *float_window, int *int_window, float alpha, int n) +av_cold static int kbd_window_init(float *float_window, int *int_window, float alpha, int n) { int i; double sum = 0.0, tmp; double scale = 0.0; - double temp[FF_KBD_WINDOW_MAX / 2 + 1]; + double temp_small[FF_KBD_WINDOW_MAX / 2 + 1]; + double *temp= n<=FF_KBD_WINDOW_MAX ? temp_small : av_malloc((n/2+1) * sizeof(*temp)); double alpha2 = 4 * (alpha * M_PI / n) * (alpha * M_PI / n); - av_assert0(n <= FF_KBD_WINDOW_MAX); + if (!temp) + return AVERROR(ENOMEM); for (i = 0; i <= n / 2; i++) { - tmp = i * (n - i) * alpha2; + tmp = alpha2 * i * (n - i); temp[i] = av_bessel_i0(sqrt(tmp)); scale += temp[i] * (1 + (i && i