[FFmpeg-devel] [PATCH] libavfilter: avoid UB nullptr-with-offset.

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Thu Feb 18 00:50:46 EET 2021


Michael Niedermayer:
> On Tue, Feb 16, 2021 at 03:53:08PM +0000, Jeremy Leconte wrote:
>> ---
>>  libavfilter/vf_scale.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
>> index 58eee96744..98cef5eb4b 100644
>> --- a/libavfilter/vf_scale.c
>> +++ b/libavfilter/vf_scale.c
>> @@ -631,7 +631,7 @@ static int scale_slice(AVFilterLink *link, AVFrame *out_buf, AVFrame *cur_pic, s
>>      int in_stride[4],out_stride[4];
>>      int i;
>>  
>> -    for (i=0; i<4; i++) {
>> +    for (i=0; i<4 && cur_pic->data[i] != NULL; i++) {
>>          int vsub= ((i+1)&2) ? scale->vsub : 0;
>>           in_stride[i] = cur_pic->linesize[i] * mul;
>>          out_stride[i] = out_buf->linesize[i] * mul;
> 
> This leaves parts of the array uninitialized 
> Ill fix this (unless someone else does before me)
> 
I noticed that GCC is smart enough to optimize a
ptr = addend ? ptr + addend : addend
to a simple ptr += addend (Clang isn't, but future version might do so).
Maybe we should put the above in a macro and use it everywhere where
such problems exist?
(It would of course not fix the case of NULL + addend with addend != 0,
but such cases are genuine logic bugs that should not be hidden, but fixed.)

- Andreas


More information about the ffmpeg-devel mailing list