[FFmpeg-devel] [PATCH 2/3] avcodec/bsf: fix resource leak in av_bsf_list_parse_str
James Almer
jamrial at gmail.com
Tue Jan 10 18:25:55 EET 2017
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 <lq at 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;
> }
>
>
More information about the ffmpeg-devel
mailing list