On 1/10/2017 8:44 AM, Steven Liu wrote: > cid: 1396268 > when av_strdup(str) error, the lst need release > > Signed-off-by: Steven Liu <l...@chinaffmpeg.org> > --- > libavcodec/bsf.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c > index ac2024b..c9b1df2 100644 > --- a/libavcodec/bsf.c > +++ b/libavcodec/bsf.c > @@ -514,8 +514,10 @@ int av_bsf_list_parse_str(const char *str, AVBSFContext > **bsf_lst) > if (!lst) > return AVERROR(ENOMEM); > > - if (!(dup = buf = av_strdup(str))) > - return AVERROR(ENOMEM); > + if (!(dup = buf = av_strdup(str))) { > + ret = AVERROR(ENOMEM); > + goto free_lst; > + } > > while (1) { > bsf_str = av_strtok(buf, ",", &saveptr); > @@ -524,16 +526,17 @@ int av_bsf_list_parse_str(const char *str, AVBSFContext > **bsf_lst) > > ret = bsf_parse_single(bsf_str, lst); > if (ret < 0) > - goto end; > + goto free_all; > > buf = NULL; > } > > ret = av_bsf_list_finalize(&lst, bsf_lst); > -end: > +free_all: > + av_free(dup); > +free_lst: > if (ret < 0) > av_bsf_list_free(&lst); > - av_free(dup);
No need for this added complexity. Just set ret to ENOMEM and goto end if av_strdup() fails, then free dup with av_freep(&dup) here. > return ret; > } > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel