[FFmpeg-devel] [PATCH 6/8] avcodec/smacker: Directly goto error in case of error
Paul B Mahol
onemda at gmail.com
Wed Aug 19 22:39:01 EEST 2020
On 8/19/20, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
> Paul B Mahol:
>> On 7/31/20, Andreas Rheinhardt <andreas.rheinhardt at gmail.com> wrote:
>>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at 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).
Add this explanation in commit log and patch is fine.
>
> - Andreas
>
>>> -
>>> error:
>>> for (int i = 0; i < 2; i++) {
>>> if (vlc[i].table)
>>> --
>>> 2.20.1
>>>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list