mirror of https://git.ffmpeg.org/ffmpeg.git
rtpenc: fix overflow checking in avc_mp4_find_startcode()
The check `start + res < start' is broken since pointer overflow is undefined behavior in C. Many compilers such as gcc/clang optimize away this check. Use `res > end - start' instead. Also change `res' to unsigned int to avoid signed left-shift overflow. Signed-off-by: Xi Wang <xi.wang@gmail.com> Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
ecb918e5f0
commit
cf29f49d8a
|
@ -31,14 +31,14 @@
|
||||||
|
|
||||||
static const uint8_t *avc_mp4_find_startcode(const uint8_t *start, const uint8_t *end, int nal_length_size)
|
static const uint8_t *avc_mp4_find_startcode(const uint8_t *start, const uint8_t *end, int nal_length_size)
|
||||||
{
|
{
|
||||||
int res = 0;
|
unsigned int res = 0;
|
||||||
|
|
||||||
if (end - start < nal_length_size)
|
if (end - start < nal_length_size)
|
||||||
return NULL;
|
return NULL;
|
||||||
while (nal_length_size--)
|
while (nal_length_size--)
|
||||||
res = (res << 8) | *start++;
|
res = (res << 8) | *start++;
|
||||||
|
|
||||||
if (start + res > end || res < 0 || start + res < start)
|
if (res > end - start)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return start + res;
|
return start + res;
|
||||||
|
|
Loading…
Reference in New Issue