From 7751e4693dd10ec98c20fbd9887233b575034272 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Thu, 20 Sep 2012 01:01:43 +0200 Subject: ogg: check that the expected number of headers had been parsed Not having the header for a codec is a tell-tale of a broken file. --- libavformat/oggdec.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'libavformat/oggdec.c') diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index e04a4e7973..c8b2a858f1 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -406,6 +406,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize, s->data_offset = FFMIN(s->data_offset, cur_os->sync_pos); } }else{ + os->nb_header++; os->pstart += os->psize; os->psize = 0; } @@ -445,7 +446,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize, static int ogg_get_headers(AVFormatContext *s) { struct ogg *ogg = s->priv_data; - int ret; + int ret, i; do{ ret = ogg_packet(s, NULL, NULL, NULL, NULL); @@ -453,6 +454,16 @@ static int ogg_get_headers(AVFormatContext *s) return ret; }while (!ogg->headers); + for (i = 0; i < ogg->nstreams; i++) { + struct ogg_stream *os = ogg->streams + i; + + if (os->codec && os->codec->nb_header && + os->nb_header < os->codec->nb_header) { + av_log(s, AV_LOG_ERROR, + "Headers mismatch for stream %d\n", i); + return AVERROR_INVALIDDATA; + } + } av_dlog(s, "found headers\n"); return 0; -- cgit v1.2.3