avfilter/formats: free the correct pointer in ADD_FORMAT()
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 21 Nov 2014 21:13:44 +0000 (22:13 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 21 Nov 2014 21:13:44 +0000 (22:13 +0100)
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>
libavfilter/formats.c

index 2fc07eb..42afcf4 100644 (file)
@@ -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);                             \
     }                                                       \
                                                             \