From 4656c1771b4ac12d9df9812390551f32fda181bc Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sat, 25 Jul 2020 13:05:06 +0200 Subject: [PATCH] avcodec/smacker: Directly goto error in case of error The earlier version did not error out directly in case an error happens, because it would lead to a leak: An allocated array is only reachable via a local variable at that time; it is only attached to more permanent storage at the end. While it would be possible to add custom code for freeing on error (instead of reusing the ordinary code for doing so), this commit takes the opposite approach and attaches the newly allocated array to its permanent place immediately after its allocation. Reviewed-by: Paul B Mahol Signed-off-by: Andreas Rheinhardt --- libavcodec/smacker.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index 8a4d88cfed..4b1f0f1b7c 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -251,17 +251,18 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int err = AVERROR(ENOMEM); goto error; } + *recodes = huff.values; res = smacker_decode_bigtree(gb, &huff, &ctx, 0); - if (res < 0) + if (res < 0) { err = res; + goto error; + } skip_bits1(gb); if(ctx.last[0] == -1) ctx.last[0] = huff.current++; if(ctx.last[1] == -1) ctx.last[1] = huff.current++; if(ctx.last[2] == -1) ctx.last[2] = huff.current++; - *recodes = huff.values; - error: for (int i = 0; i < 2; i++) { if (vlc[i].table)