lavc/vaapi_{decode, av1}: Fix memory leak in fail codepath

Signed-off-by: Fei Wang <fei.w.wang@intel.com>
release/7.1
Fei Wang 6 months ago committed by Haihao Xiang
parent 9c8881cb35
commit 246600974f
  1. 9
      libavcodec/vaapi_av1.c
  2. 5
      libavcodec/vaapi_decode.c

@ -404,14 +404,15 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx,
nb_params = s->tg_end - s->tg_start + 1; nb_params = s->tg_end - s->tg_start + 1;
if (ctx->nb_slice_params < nb_params) { if (ctx->nb_slice_params < nb_params) {
ctx->slice_params = av_realloc_array(ctx->slice_params, VASliceParameterBufferAV1 *tmp = av_realloc_array(ctx->slice_params,
nb_params, nb_params,
sizeof(*ctx->slice_params)); sizeof(*ctx->slice_params));
if (!ctx->slice_params) { if (!tmp) {
ctx->nb_slice_params = 0; ctx->nb_slice_params = 0;
err = AVERROR(ENOMEM); err = AVERROR(ENOMEM);
goto fail; goto fail;
} }
ctx->slice_params = tmp;
ctx->nb_slice_params = nb_params; ctx->nb_slice_params = nb_params;
} }

@ -74,13 +74,14 @@ int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx,
av_assert0(pic->nb_slices <= pic->slices_allocated); av_assert0(pic->nb_slices <= pic->slices_allocated);
if (pic->nb_slices == pic->slices_allocated) { if (pic->nb_slices == pic->slices_allocated) {
pic->slice_buffers = VABufferID *tmp =
av_realloc_array(pic->slice_buffers, av_realloc_array(pic->slice_buffers,
pic->slices_allocated ? pic->slices_allocated * 2 : 64, pic->slices_allocated ? pic->slices_allocated * 2 : 64,
2 * sizeof(*pic->slice_buffers)); 2 * sizeof(*pic->slice_buffers));
if (!pic->slice_buffers) if (!tmp)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
pic->slice_buffers = tmp;
pic->slices_allocated = pic->slices_allocated ? pic->slices_allocated * 2 : 64; pic->slices_allocated = pic->slices_allocated ? pic->slices_allocated * 2 : 64;
} }
av_assert0(pic->nb_slices + 1 <= pic->slices_allocated); av_assert0(pic->nb_slices + 1 <= pic->slices_allocated);

Loading…
Cancel
Save