[FFmpeg-devel] [PATCH 09/11] avformat/utils: Fix memleaks in avformat_open_input()

Marton Balint cus at passwd.hu
Sat Feb 15 19:38:09 EET 2020



On Tue, 7 Jan 2020, Andreas Rheinhardt wrote:

> A demuxer might have allocated memory while reading the header. If
> reading the header was successfull and an error happens before returning
> (e.g. when queueing the attached pictures), the read_close function
> would have never been called, so that all those allocations would leak.
> This commit changes this.
>
> Furthermore, there would be even more memleaks if the error level was
> set to AV_EF_EXPLODE in case there is both metadata and id3v2 metadata.
> This has been fixed, too.

Thanks, applied.

Regards,
Marton

>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> libavformat/utils.c | 17 +++++++++++------
> 1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 2470a6ac0e..cf7dabefbb 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -642,26 +642,28 @@ FF_ENABLE_DEPRECATION_WARNINGS
>             level = AV_LOG_ERROR;
>         av_log(s, level, "Discarding ID3 tags because more suitable tags were found.\n");
>         av_dict_free(&s->internal->id3v2_meta);
> -        if (s->error_recognition & AV_EF_EXPLODE)
> -            return AVERROR_INVALIDDATA;
> +        if (s->error_recognition & AV_EF_EXPLODE) {
> +            ret = AVERROR_INVALIDDATA;
> +            goto close;
> +        }
>     }
>
>     if (id3v2_extra_meta) {
>         if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") ||
>             !strcmp(s->iformat->name, "tta") || !strcmp(s->iformat->name, "wav")) {
>             if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0)
> -                goto fail;
> +                goto close;
>             if ((ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0)
> -                goto fail;
> +                goto close;
>             if ((ret = ff_id3v2_parse_priv(s, &id3v2_extra_meta)) < 0)
> -                goto fail;
> +                goto close;
>         } else
>             av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n");
>     }
>     ff_id3v2_free_extra_meta(&id3v2_extra_meta);
>
>     if ((ret = avformat_queue_attached_pictures(s)) < 0)
> -        goto fail;
> +        goto close;
>
>     if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->internal->data_offset)
>         s->internal->data_offset = avio_tell(s->pb);
> @@ -680,6 +682,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
>     *ps = s;
>     return 0;
> 
> +close:
> +    if (s->iformat->read_close)
> +        s->iformat->read_close(s);
> fail:
>     ff_id3v2_free_extra_meta(&id3v2_extra_meta);
>     av_dict_free(&tmp);
> -- 
> 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".


More information about the ffmpeg-devel mailing list