diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-11-22 00:13:44 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-22 00:13:44 +0300 |
commit | 75819fafd8213875af2bfbe5ea821ae5b8d419f9 (patch) | |
tree | ed81c58922fba15699b989f7eef90456e3ebfa1c /libavfilter/formats.c | |
parent | 42f3cb419aa0903eb11ac69ea94e636992a170ca (diff) |
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 <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/formats.c')
-rw-r--r-- | libavfilter/formats.c | 4 |
1 files changed, 3 insertions, 1 deletions
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); \ } \ \ |