[FFmpeg-devel] [PATCH] avcodec/h264dec: Fix init_context memleak on error path
Zhao Zhili
quinkblack at foxmail.com
Mon Sep 10 14:06:28 EEST 2018
Please review, thanks!
On 2018年09月05日 16:53, Zhao Zhili wrote:
> ---
> libavcodec/h264dec.c | 28 ++++++++++++++++++++++------
> 1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
> index 8d115fa..b2447e9 100644
> --- a/libavcodec/h264dec.c
> +++ b/libavcodec/h264dec.c
> @@ -303,6 +303,7 @@ fail:
> static int h264_init_context(AVCodecContext *avctx, H264Context *h)
> {
> int i;
> + int ret;
>
> h->avctx = avctx;
> h->cur_chroma_format_idc = -1;
> @@ -337,22 +338,37 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)
>
> for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
> h->DPB[i].f = av_frame_alloc();
> - if (!h->DPB[i].f)
> - return AVERROR(ENOMEM);
> + if (!h->DPB[i].f) {
> + ret = AVERROR(ENOMEM);
> + goto fail;
> + }
> }
>
> h->cur_pic.f = av_frame_alloc();
> - if (!h->cur_pic.f)
> - return AVERROR(ENOMEM);
> + if (!h->cur_pic.f) {
> + ret = AVERROR(ENOMEM);
> + goto fail;
> + }
>
> h->last_pic_for_ec.f = av_frame_alloc();
> - if (!h->last_pic_for_ec.f)
> - return AVERROR(ENOMEM);
> + if (!h->last_pic_for_ec.f) {
> + ret = AVERROR(ENOMEM);
> + goto fail;
> + }
>
> for (i = 0; i < h->nb_slice_ctx; i++)
> h->slice_ctx[i].h264 = h;
>
> return 0;
> +
> +fail:
> + h->nb_slice_ctx = 0;
> + av_freep(&h->slice_ctx);
> + for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
> + av_frame_free(&h->DPB[i].f);
> + }
> + av_frame_free(&h->cur_pic.f);
> + return ret;
> }
>
> static av_cold int h264_decode_end(AVCodecContext *avctx)
More information about the ffmpeg-devel
mailing list