Potential integer overflow in RTMPPacket_Alloc().
Aside: issue 3/7 could not be reproduced.
}
int
-RTMPPacket_Alloc(RTMPPacket *p, int nSize)
+RTMPPacket_Alloc(RTMPPacket *p, uint32_t nSize)
{
- char *ptr = calloc(1, nSize + RTMP_MAX_HEADER_SIZE);
+ char *ptr;
+ if (nSize > SIZE_MAX - RTMP_MAX_HEADER_SIZE)
+ return FALSE;
+ ptr = calloc(1, nSize + RTMP_MAX_HEADER_SIZE);
if (!ptr)
return FALSE;
p->m_body = ptr + RTMP_MAX_HEADER_SIZE;
void RTMPPacket_Reset(RTMPPacket *p);
void RTMPPacket_Dump(RTMPPacket *p);
- int RTMPPacket_Alloc(RTMPPacket *p, int nSize);
+ int RTMPPacket_Alloc(RTMPPacket *p, uint32_t nSize);
void RTMPPacket_Free(RTMPPacket *p);
#define RTMPPacket_IsReady(a) ((a)->m_nBytesRead == (a)->m_nBodySize)