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>
pull/93/merge
Michael Niedermayer 10 years ago
parent 42f3cb419a
commit 75819fafd8
  1. 4
      libavfilter/formats.c

@ -314,6 +314,7 @@ AVFilterChannelLayouts *avfilter_make_format64_list(const int64_t *fmts)
#define ADD_FORMAT(f, fmt, type, list, nb) \ #define ADD_FORMAT(f, fmt, type, list, nb) \
do { \ do { \
type *fmts; \ type *fmts; \
void *oldf = *f; \
\ \
if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) \ if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) \
return AVERROR(ENOMEM); \ return AVERROR(ENOMEM); \
@ -321,7 +322,8 @@ do { \
fmts = av_realloc((*f)->list, \ fmts = av_realloc((*f)->list, \
sizeof(*(*f)->list) * ((*f)->nb + 1));\ sizeof(*(*f)->list) * ((*f)->nb + 1));\
if (!fmts) { \ if (!fmts) { \
av_freep(&f); \ if (!oldf) \
av_freep(f); \
return AVERROR(ENOMEM); \ return AVERROR(ENOMEM); \
} \ } \
\ \

Loading…
Cancel
Save