From 836c8750b31329e71e5ac2a194523172875b77eb Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Fri, 27 Jan 2017 13:37:00 +0100 Subject: avfilter/avf_showspectrum: fix 2 possible crashes Make sure no division by zero is done. Make sure there are actually samples available. Signed-off-by: Paul B Mahol --- libavfilter/avf_showspectrum.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index 87766688f8..09b5a2a51f 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -1022,17 +1022,19 @@ static int showspectrumpic_request_frame(AVFilterLink *outlink) AVFilterContext *ctx = outlink->src; ShowSpectrumContext *s = ctx->priv; AVFilterLink *inlink = ctx->inputs[0]; - int ret; + int ret, samples; ret = ff_request_frame(inlink); - if (ret == AVERROR_EOF && s->outpicref) { - int samples = av_audio_fifo_size(s->fifo); + samples = av_audio_fifo_size(s->fifo); + if (ret == AVERROR_EOF && s->outpicref && samples > 0) { int consumed = 0; int y, x = 0, sz = s->orientation == VERTICAL ? s->w : s->h; int ch, spf, spb; AVFrame *fin; spf = s->win_size * (samples / ((s->win_size * sz) * ceil(samples / (float)(s->win_size * sz)))); + spf = FFMAX(1, spf); + spb = (samples / (spf * sz)) * spf; fin = ff_get_audio_buffer(inlink, s->win_size); -- cgit v1.2.3