[FFmpeg-devel] [PATCH 1/2] avcodec/snowdec: Cleanup avmv on errors
Marton Balint
cus at passwd.hu
Sat Aug 14 19:41:29 EEST 2021
On Sun, 15 Aug 2021, "zhilizhao(赵志立)" wrote:
>
>
>> On Aug 14, 2021, at 11:52 PM, Michael Niedermayer <michael at niedermayer.cc> wrote:
>>
>> On Sat, Aug 14, 2021 at 11:45:59PM +0800, "zhilizhao(赵志立)" wrote:
>>>
>>>
>>>> On Aug 14, 2021, at 11:07 PM, Michael Niedermayer <michael at niedermayer.cc> wrote:
>>>>
>>>> Fixes: Assertion failure
>>>> Fixes: 36359/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-6733238591684608
>>>>
>>>> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
>>>> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
>>>> ---
>>>> libavcodec/snowdec.c | 8 ++++----
>>>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/libavcodec/snowdec.c b/libavcodec/snowdec.c
>>>> index 1355ae6ed1..7ef28c4899 100644
>>>> --- a/libavcodec/snowdec.c
>>>> +++ b/libavcodec/snowdec.c
>>>> @@ -499,7 +499,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
>>>> s->avmv_index = 0;
>>>>
>>>> if ((res = decode_blocks(s)) < 0)
>>>> - return res;
>>>> + goto fail;
>>>>
>>>> for(plane_index=0; plane_index < s->nb_planes; plane_index++){
>>>> Plane *p= &s->plane[plane_index];
>>>> @@ -618,11 +618,11 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
>>>> AVFrameSideData *sd;
>>>>
>>>> sd = av_frame_new_side_data(picture, AV_FRAME_DATA_MOTION_VECTORS, s->avmv_index * sizeof(AVMotionVector));
>>>> - if (!sd)
>>>> - return AVERROR(ENOMEM);
>>>> - memcpy(sd->data, s->avmv, s->avmv_index * sizeof(AVMotionVector));
>>>> + if (sd)
>>>> + memcpy(sd->data, s->avmv, s->avmv_index * sizeof(AVMotionVector));
>>>
>>> res is not assigned to AVERROR(ENOMEM), so the error is just being ignored. Is it intentional?
>>
>> the frame was decoded correctly, just exporting the vectors failed.
>> Should we fail and then discard the frame as a result ?
>> It seemed better to not fail here, but i was a bit undecided here,
>> what do others think ?
>> so yes it was intentional but maybe it should be done differently, depends
>> on what people prefer ...
>
> Understood. In the ENOMEM case, I prefer simple logic than do the best effort
> to give the user a partly success result. Somebody who don’t get the idea may
> try to ‘fix’ it again. Although I don’t have a strong opinion on that.
IMHO ignoring ENOMEM errors is just bad practice. Every ENOMEM error
should be propagated back to the user.
Regards,
Marton
More information about the ffmpeg-devel
mailing list