From 75819fafd8213875af2bfbe5ea821ae5b8d419f9 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 21 Nov 2014 22:13:44 +0100 Subject: [PATCH] avfilter/formats: free the correct pointer in ADD_FORMAT() Also only free it when it was not previously allocated to return to the state prior to the failing function call Signed-off-by: Michael Niedermayer --- libavfilter/formats.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavfilter/formats.c b/libavfilter/formats.c index 2fc07eb4e0..42afcf4ab4 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -314,6 +314,7 @@ AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts) #define ADD_FORMAT(f, fmt, type, list, nb) \ do { \ type *fmts; \ + void *oldf = *f; \ \ if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) \ return AVERROR(ENOMEM); \ @@ -321,7 +322,8 @@ do { \ fmts = av_realloc((*f)->list, \ sizeof(*(*f)->list) * ((*f)->nb + 1));\ if (!fmts) { \ - av_freep(&f); \ + if (!oldf) \ + av_freep(f); \ return AVERROR(ENOMEM); \ } \ \