X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fsiff.c;h=a34de24ec82ddc7b0739a0dee68d5603c2f75ffc;hb=bd96c54fe4819b3ca9a975e2083d67f4443c559b;hp=ddd171568061c59e99a3354e87c62dbb42f28ca6;hpb=7167ac33a8f2c7d063384c267f984f23d2b73854;p=ffmpeg diff --git a/libavformat/siff.c b/libavformat/siff.c index ddd17156806..a34de24ec82 100644 --- a/libavformat/siff.c +++ b/libavformat/siff.c @@ -62,7 +62,7 @@ typedef struct SIFFContext { uint8_t gmc[4]; } SIFFContext; -static int siff_probe(AVProbeData *p) +static int siff_probe(const AVProbeData *p) { uint32_t tag = AV_RL32(p->buf + 8); /* check file header */ @@ -192,6 +192,7 @@ static int siff_read_header(AVFormatContext *s) static int siff_read_packet(AVFormatContext *s, AVPacket *pkt) { SIFFContext *c = s->priv_data; + int ret; if (c->has_video) { unsigned int size; @@ -200,6 +201,8 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt) if (c->curstrm == -1) { c->pktsize = avio_rl32(s->pb) - 4; c->flags = avio_rl16(s->pb); + if (c->flags & VB_HAS_AUDIO && !c->has_audio) + return AVERROR_INVALIDDATA; c->gmcsize = (c->flags & VB_HAS_GMC) ? 4 : 0; if (c->gmcsize) avio_read(s->pb, c->gmc, c->gmcsize); @@ -213,13 +216,12 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt) size = c->pktsize - c->sndsize - c->gmcsize - 2; size = ffio_limit(s->pb, size); - if (av_new_packet(pkt, size + c->gmcsize + 2) < 0) - return AVERROR(ENOMEM); + if ((ret = av_new_packet(pkt, size + c->gmcsize + 2)) < 0) + return ret; AV_WL16(pkt->data, c->flags); if (c->gmcsize) memcpy(pkt->data + 2, c->gmc, c->gmcsize); if (avio_read(s->pb, pkt->data + 2 + c->gmcsize, size) != size) { - av_packet_unref(pkt); return AVERROR_INVALIDDATA; } pkt->stream_index = 0; @@ -247,7 +249,7 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt) return pkt->size; } -AVInputFormat ff_siff_demuxer = { +const AVInputFormat ff_siff_demuxer = { .name = "siff", .long_name = NULL_IF_CONFIG_SMALL("Beam Software SIFF"), .priv_data_size = sizeof(SIFFContext),