[FFmpeg-devel] [PATCH 11/16] avformat/hlsenc: Fix memleaks with repeating parameters
Steven Liu
lq at chinaffmpeg.org
Mon Dec 16 04:58:54 EET 2019
> 在 2019年12月16日,08:04,Andreas Rheinhardt <andreas.rheinhardt at gmail.com> 写道:
>
> When a parameter like e.g. language is contained more than once in the
> part of var_stream_map pertaining to a single VariantStream, the later
> one just overwrites the pointer to the earlier one, leading to a
> memleak. This commit changes this by handling the situation gracefully:
> The earlier string is silently freed first, so that the last one wins.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> Picky solutions are of course possible, too.
>
> libavformat/hlsenc.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> index 669641885e..d5682caaf7 100644
> --- a/libavformat/hlsenc.c
> +++ b/libavformat/hlsenc.c
> @@ -1941,6 +1941,7 @@ static int parse_variant_stream_mapstring(AVFormatContext *s)
> while (keyval = av_strtok(varstr, ",", &saveptr2)) {
> varstr = NULL;
> if (av_strstart(keyval, "language:", &val)) {
> + av_free(vs->language);
> vs->language = av_strdup(val);
> if (!vs->language)
> return AVERROR(ENOMEM);
> @@ -1951,16 +1952,19 @@ static int parse_variant_stream_mapstring(AVFormatContext *s)
> hls->has_default_key = 1;
> continue;
> } else if (av_strstart(keyval, "name:", &val)) {
> + av_free(vs->varname);
> vs->varname = av_strdup(val);
> if (!vs->varname)
> return AVERROR(ENOMEM);
> continue;
> } else if (av_strstart(keyval, "agroup:", &val)) {
> + av_free(vs->agroup);
> vs->agroup = av_strdup(val);
> if (!vs->agroup)
> return AVERROR(ENOMEM);
> continue;
> } else if (av_strstart(keyval, "ccgroup:", &val)) {
> + av_free(vs->ccgroup);
> vs->ccgroup = av_strdup(val);
> if (!vs->ccgroup)
> return AVERROR(ENOMEM);
> @@ -2052,14 +2056,17 @@ static int parse_cc_stream_mapstring(AVFormatContext *s)
> ccstr = NULL;
>
> if (av_strstart(keyval, "ccgroup:", &val)) {
> + av_free(ccs->ccgroup);
> ccs->ccgroup = av_strdup(val);
> if (!ccs->ccgroup)
> return AVERROR(ENOMEM);
> } else if (av_strstart(keyval, "instreamid:", &val)) {
> + av_free(ccs->instreamid);
> ccs->instreamid = av_strdup(val);
> if (!ccs->instreamid)
> return AVERROR(ENOMEM);
> } else if (av_strstart(keyval, "language:", &val)) {
> + av_free(ccs->language);
> ccs->language = av_strdup(val);
> if (!ccs->language)
> return AVERROR(ENOMEM);
> --
> 2.20.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
LGTM
Thanks
Steven
More information about the ffmpeg-devel
mailing list