avfilter/af_headphone: fix memory leak and overread
authorPaul B Mahol <onemda@gmail.com>
Sat, 14 Apr 2018 17:42:16 +0000 (19:42 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sat, 14 Apr 2018 17:42:16 +0000 (19:42 +0200)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavfilter/af_headphone.c

index edb1fac..8b34609 100644 (file)
@@ -747,15 +747,19 @@ static int request_frame(AVFilterLink *outlink)
     ret = ff_request_frame(ctx->inputs[0]);
     if (ret == AVERROR_EOF && av_audio_fifo_size(s->in[0].fifo) > 0 && s->have_hrirs) {
         int nb_samples = av_audio_fifo_size(s->in[0].fifo);
-        AVFrame *in = ff_get_audio_buffer(outlink, s->size - nb_samples);
+        AVFrame *in = ff_get_audio_buffer(ctx->inputs[0], s->size - nb_samples);
+
+        if (!in)
+            return AVERROR(ENOMEM);
 
         av_samples_set_silence(in->extended_data, 0,
                                in->nb_samples,
-                               outlink->channels,
-                               outlink->format);
+                               in->channels,
+                               in->format);
 
         ret = av_audio_fifo_write(s->in[0].fifo, (void **)in->extended_data,
                                   in->nb_samples);
+        av_frame_free(&in);
         if (ret < 0)
             return ret;
         ret = headphone_frame(s, outlink, nb_samples);