Paul B Mahol: > On 7/31/20, Andreas Rheinhardt <andreas.rheinha...@gmail.com> wrote: >> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> >> --- >> 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; > > Commit log does not explain this change at all. > And it looks wrong at first look. >
huff.values is freshly allocated and if an error happens after its allocation, it either needs to be stored permanently to not go out of scope or it needs to be freed in this function. The latter option would lead to redundant code (one can just reuse the decoder's close function), so neither the old nor my proposed new code does this. The old code solves this problem by not jumping to error in case smacker_decode_bigtree() fails, my new code solves this problem by storing the array immediately after its allocation (before smacker_decode_bigtree()). (Another option would be to store the array after the error: label, but I think storing something as soon as possible is better practice). - Andreas >> - >> error: >> for (int i = 0; i < 2; i++) { >> if (vlc[i].table) >> -- >> 2.20.1 >> _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".