X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fsmjpegdec.c;h=dc95a822c5e215f2159838c51851ad0c0182c632;hb=bc70684e74a185d7b80c8b80bdedda659cb581b8;hp=c184c0d9fdc04e5cbc0dfb3df6b313125908c17d;hpb=06476249cd2332e30b66576633b2827adf3478dd;p=ffmpeg diff --git a/libavformat/smjpegdec.c b/libavformat/smjpegdec.c index c184c0d9fdc..dc95a822c5e 100644 --- a/libavformat/smjpegdec.c +++ b/libavformat/smjpegdec.c @@ -36,7 +36,7 @@ typedef struct SMJPEGContext { int video_stream_index; } SMJPEGContext; -static int smjpeg_probe(AVProbeData *p) +static int smjpeg_probe(const AVProbeData *p) { if (!memcmp(p->buf, SMJPEG_MAGIC, 8)) return AVPROBE_SCORE_MAX; @@ -51,6 +51,9 @@ static int smjpeg_read_header(AVFormatContext *s) uint32_t version, htype, hlength, duration; char *comment; + sc->audio_stream_index = + sc->video_stream_index = -1; + avio_skip(pb, 8); // magic version = avio_rb32(pb); if (version) @@ -147,6 +150,8 @@ static int smjpeg_read_packet(AVFormatContext *s, AVPacket *pkt) dtype = avio_rl32(s->pb); switch (dtype) { case SMJPEG_SNDD: + if (sc->audio_stream_index < 0) + return AVERROR_INVALIDDATA; timestamp = avio_rb32(s->pb); size = avio_rb32(s->pb); ret = av_get_packet(s->pb, pkt, size); @@ -155,6 +160,8 @@ static int smjpeg_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->pos = pos; break; case SMJPEG_VIDD: + if (sc->video_stream_index < 0) + return AVERROR_INVALIDDATA; timestamp = avio_rb32(s->pb); size = avio_rb32(s->pb); ret = av_get_packet(s->pb, pkt, size); @@ -173,7 +180,7 @@ static int smjpeg_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; } -AVInputFormat ff_smjpeg_demuxer = { +const AVInputFormat ff_smjpeg_demuxer = { .name = "smjpeg", .long_name = NULL_IF_CONFIG_SMALL("Loki SDL MJPEG"), .priv_data_size = sizeof(SMJPEGContext),