|
|
@ -56,7 +56,7 @@ typedef struct SIFFContext { |
|
|
|
int curstrm; |
|
|
|
int curstrm; |
|
|
|
unsigned int pktsize; |
|
|
|
unsigned int pktsize; |
|
|
|
int gmcsize; |
|
|
|
int gmcsize; |
|
|
|
int sndsize; |
|
|
|
unsigned int sndsize; |
|
|
|
|
|
|
|
|
|
|
|
unsigned int flags; |
|
|
|
unsigned int flags; |
|
|
|
uint8_t gmc[4]; |
|
|
|
uint8_t gmc[4]; |
|
|
@ -208,10 +208,11 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!c->curstrm) { |
|
|
|
if (!c->curstrm) { |
|
|
|
|
|
|
|
if (c->pktsize < 2LL + c->sndsize + c->gmcsize) |
|
|
|
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
|
|
|
size = c->pktsize - c->sndsize - c->gmcsize - 2; |
|
|
|
size = c->pktsize - c->sndsize - c->gmcsize - 2; |
|
|
|
size = ffio_limit(s->pb, size); |
|
|
|
size = ffio_limit(s->pb, size); |
|
|
|
if (size < 0 || c->pktsize < c->sndsize) |
|
|
|
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
if (av_new_packet(pkt, size + c->gmcsize + 2) < 0) |
|
|
|
if (av_new_packet(pkt, size + c->gmcsize + 2) < 0) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
AV_WL16(pkt->data, c->flags); |
|
|
|
AV_WL16(pkt->data, c->flags); |
|
|
|