On Fri, Dec 04, 2015 at 09:39:41AM -0500, Ganesh Ajjanagadde wrote: > Recent commits 6aaac24d72a7da631173209841a3944fcb4a3309 and > 3835554bf8ed78539a3492c239f979c0ab03a15f made progress towards cleaning > up usage of the formats API, and in particular fixed possible NULL pointer > dereferences. > > This commit addresses the issue of possible resource leaks when some > intermediate > call fails. Unfortunately, even leaving aside this subtle intermediate > failure aspect, commit 8087632027d755cd32ccc9e91ea025e276197055 was only > partially successful in addressing memleaks. Hopefully, this commit > fixes the issue completely. > > Tested with valgrind --leak-check=full --show-leak-kinds=all, and manual > simulation > of malloc/realloc failures. > > Fixes: CID 1270818. > > Signed-off-by: Ganesh Ajjanagadde <gajjanaga...@gmail.com> > --- > libavfilter/vf_showpalette.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/libavfilter/vf_showpalette.c b/libavfilter/vf_showpalette.c > index fcb43a3..1614157 100644 > --- a/libavfilter/vf_showpalette.c > +++ b/libavfilter/vf_showpalette.c > @@ -50,14 +50,20 @@ static int query_formats(AVFilterContext *ctx) > AVFilterFormats *in = ff_make_format_list(in_fmts); > AVFilterFormats *out = ff_make_format_list(out_fmts); > if (!in || !out) { > - av_freep(&in); > - av_freep(&out); > - return AVERROR(ENOMEM); > + ret = AVERROR(ENOMEM); > + goto fail; > } > + > if ((ret = ff_formats_ref(in , &ctx->inputs[0]->out_formats)) < 0 || > (ret = ff_formats_ref(out, &ctx->outputs[0]->in_formats)) < 0) > - return ret; > + goto fail; > return 0; > +fail:
> + av_freep(&in->formats); what if in==NULL? > + av_freep(&in); > + av_freep(&out->formats); ditto > + av_freep(&out); > + return ret; > } -- Clément B.
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel