[FFmpeg-devel] [PATCH] avformat/avidec: Fix integer overflow iff ULONG_MAX < INT64_MAX

James Almer jamrial at gmail.com
Wed Mar 13 01:51:56 EET 2024


On 3/12/2024 8:01 PM, Andreas Rheinhardt wrote:
> James Almer:
>> On 3/12/2024 7:57 PM, Andreas Rheinhardt wrote:
>>> Affects many FATE-tests, see
>>> http://fate.ffmpeg.org/report.cgi?time=20240312011016&slot=ppc-linux-gcc-13.2-ubsan-altivec-qemu
>>>
>>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
>>> ---
>>>    libavformat/avidec.c | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/libavformat/avidec.c b/libavformat/avidec.c
>>> index f3183b2698..b7cbf148af 100644
>>> --- a/libavformat/avidec.c
>>> +++ b/libavformat/avidec.c
>>> @@ -1696,7 +1696,7 @@ static int
>>> check_stream_max_drift(AVFormatContext *s)
>>>        int *idx = av_calloc(s->nb_streams, sizeof(*idx));
>>>        if (!idx)
>>>            return AVERROR(ENOMEM);
>>> -    for (min_pos = pos = 0; min_pos != INT64_MAX; pos = min_pos + 1LU) {
>>> +    for (min_pos = pos = 0; min_pos != INT64_MAX; pos = min_pos +
>>> (uint64_t)1) {
>>
>> nit: 1ULL
>>
> 
> The other variables are int64_t, not long long int, so using uint64_t is
> appropriate.

In practice it's not only the same, but also cleaner looking and done 
all across the codebase. But if you really want it to be uint64_t, then 
maybe use UINT64_C(1) instead (which, fwiw, will be expanded to 1ULL or 
even 1UL depending on target).

> 
> - Andreas


More information about the ffmpeg-devel mailing list