[FFmpeg-devel] [FFmpeg-cvslog] avcodec/avpacket: Avoid unspecific return -1 for av_grow_packet()

Carl Eugen Hoyos ceffmpeg at gmail.com
Sun Jan 6 15:45:46 EET 2019


2019-01-06 14:43 GMT+01:00, James Almer <jamrial at gmail.com>:
> On 1/6/2019 10:36 AM, Carl Eugen Hoyos wrote:
>> 2019-01-02 0:23 GMT+01:00, Michael Niedermayer <git at videolan.org>:
>>> ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> |
>>> Mon
>>> Dec 31 18:25:18 2018 +0100| [9520d51e21f9aa5adc807b0b89322bd822b06738] |
>>> committer: Michael Niedermayer
>>>
>>> avcodec/avpacket: Avoid unspecific return -1 for av_grow_packet()
>>>
>>> Reviewed-by: Paul B Mahol <onemda at gmail.com>
>>> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
>>>
>>>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9520d51e21f9aa5adc807b0b89322bd822b06738
>>> ---
>>>
>>>  libavcodec/avpacket.c | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
>>> index e160ad3033..11ac4e80cd 100644
>>> --- a/libavcodec/avpacket.c
>>> +++ b/libavcodec/avpacket.c
>>> @@ -112,7 +112,7 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
>>>      av_assert0((unsigned)pkt->size <= INT_MAX -
>>> AV_INPUT_BUFFER_PADDING_SIZE);
>>>      if ((unsigned)grow_by >
>>>          INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE))
>>> -        return -1;
>>> +        return AVERROR(ENOMEM);
>>>
>>>      new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE;
>>>      if (pkt->buf) {
>>> @@ -124,7 +124,7 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
>>>          } else {
>>>              data_offset = pkt->data - pkt->buf->data;
>>>              if (data_offset > INT_MAX - new_size)
>>> -                return -1;
>>> +                return AVERROR(ENOMEM);
>>
>> Is this really correct?
>> At least on some 64bit systems, larger allocations should be possible,
>> we are simply assuming invalid data if such an allocation is tried, no?
>
> Even if av_max_alloc() allows the API user to allocate more than INT_MAX
> bytes, AVPackets can't handle it as they use int for size.

That's what I am saying: There is no memory issue in above case,
just that we refuse to handle the case.

Carl Eugen


More information about the ffmpeg-devel mailing list