[FFmpeg-devel] [PATCH 1/3] avfilter/avfilter: Fix leaks upon filter creation error

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Aug 11 02:42:24 EEST 2021


Both the name as well as the options need to be freed.
(Right now there is no option for the AVFilterContext itself that could
leak, but some filters have options (e.g. of type AV_OPT_TYPE_STRING)
that can leak.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
I intend to remove this duplicated freeing code and call avfilter_free()
directly once it is ensured that it is safe to do so; a few checks will
have to be added to it and the filters will have to be checked to be
compatible with it. The only thing I already found out is that libvamf
is buggy (even without calling avfilter_free), because it just presumes
that a mutex and a condition variable have always been properly
initialized.

 libavfilter/avfilter.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 358bf8a853..908e812b5c 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -684,13 +684,19 @@ AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name)
 err:
     if (preinited)
         filter->uninit(ret);
+    av_freep(&ret->name);
     av_freep(&ret->inputs);
     av_freep(&ret->input_pads);
     ret->nb_inputs = 0;
     av_freep(&ret->outputs);
     av_freep(&ret->output_pads);
     ret->nb_outputs = 0;
-    av_freep(&ret->priv);
+    if (ret->priv) {
+        if (filter->priv_class)
+            av_opt_free(ret->priv);
+        av_freep(&ret->priv);
+    }
+    av_opt_free(ret);
     av_freep(&ret->internal);
     av_free(ret);
     return NULL;
-- 
2.30.2



More information about the ffmpeg-devel mailing list