avfilter/af_afftdn: fix memory leaks reported by coverity
authorPaul B Mahol <onemda@gmail.com>
Sun, 28 Oct 2018 21:30:06 +0000 (22:30 +0100)
committerPaul B Mahol <onemda@gmail.com>
Sun, 28 Oct 2018 21:33:20 +0000 (22:33 +0100)
libavfilter/af_afftdn.c

index 428375b694ffb5ee2d20c19d56c219d0491f7c68..ed2c1c1defbe815a731c01d64cdb7fb0c5e0d931 100644 (file)
@@ -1163,15 +1163,13 @@ static int output_frame(AVFilterLink *inlink)
     ThreadData td;
     int ret = 0;
 
-    if (!in) {
-        in = ff_get_audio_buffer(outlink, s->window_length);
-        if (!in)
-            return AVERROR(ENOMEM);
-    }
+    in = ff_get_audio_buffer(outlink, s->window_length);
+    if (!in)
+        return AVERROR(ENOMEM);
 
     ret = av_audio_fifo_peek(s->fifo, (void **)in->extended_data, s->window_length);
     if (ret < 0)
-        return ret;
+        goto end;
 
     if (s->track_noise) {
         for (int ch = 0; ch < inlink->channels; ch++) {
@@ -1248,7 +1246,9 @@ static int output_frame(AVFilterLink *inlink)
                 dst[m] = orig[m] - src[m];
             break;
         default:
-            return AVERROR_BUG;
+            av_frame_free(&out);
+            ret = AVERROR_BUG;
+            goto end;
         }
         memmove(src, src + s->sample_advance, (s->window_length - s->sample_advance) * sizeof(*src));
         memset(src + (s->window_length - s->sample_advance), 0, s->sample_advance * sizeof(*src));