From 5b4aa634f207d765ffc57c49e0177fe8c0f19d3b Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Mon, 30 Nov 2020 19:59:07 +0100 Subject: [PATCH] avcodec/vqavideo: Cleanup generically on init failure Signed-off-by: Andreas Rheinhardt --- libavcodec/vqavideo.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/libavcodec/vqavideo.c b/libavcodec/vqavideo.c index f690f7464a..12698dc2e8 100644 --- a/libavcodec/vqavideo.c +++ b/libavcodec/vqavideo.c @@ -171,17 +171,17 @@ static av_cold int vqa_decode_init(AVCodecContext *avctx) s->codebook_size = MAX_CODEBOOK_SIZE; s->codebook = av_malloc(s->codebook_size); if (!s->codebook) - goto fail; + return AVERROR(ENOMEM); s->next_codebook_buffer = av_malloc(s->codebook_size); if (!s->next_codebook_buffer) - goto fail; + return AVERROR(ENOMEM); /* allocate decode buffer */ s->decode_buffer_size = (s->width / s->vector_width) * (s->height / s->vector_height) * 2; s->decode_buffer = av_mallocz(s->decode_buffer_size); if (!s->decode_buffer) - goto fail; + return AVERROR(ENOMEM); /* initialize the solid-color vectors */ if (s->vector_height == 4) { @@ -198,11 +198,6 @@ static av_cold int vqa_decode_init(AVCodecContext *avctx) s->next_codebook_buffer_index = 0; return 0; -fail: - av_freep(&s->codebook); - av_freep(&s->next_codebook_buffer); - av_freep(&s->decode_buffer); - return AVERROR(ENOMEM); } #define CHECK_COUNT() \ @@ -653,5 +648,5 @@ const AVCodec ff_vqa_decoder = { .decode = vqa_decode_frame, .capabilities = AV_CODEC_CAP_DR1, .defaults = vqa_defaults, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, };