[FFmpeg-devel] [PATCH] Vorbis-in-Ogg: Do not set timebase to invalid values
Måns Rullgård
mans
Sat Jan 29 05:42:14 CET 2011
Janne Grunau <janne-ffmpeg at jannau.net> writes:
> From: Reimar D?ffinger <Reimar.Doeffinger at gmx.de>
>
> cherry picked from git.videolan.org repo
>
> Janne
> ---8<---
> Avoids an assert when the sample rate is invalid and the timebase
> is thus set to e.g. 1/0.
> Sample file is http://samples.mplayerhq.hu/ogg/fuzzed-srate-crash.ogg
> ---
> libavformat/oggparsevorbis.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
> index cdb0266..d743d25 100644
> --- a/libavformat/oggparsevorbis.c
> +++ b/libavformat/oggparsevorbis.c
> @@ -221,6 +221,7 @@ vorbis_header (AVFormatContext * s, int idx)
> if (os->buf[os->pstart] == 1) {
> const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */
> unsigned blocksize, bs0, bs1;
> + int srate;
>
> if (os->psize != 30)
> return -1;
> @@ -229,7 +230,7 @@ vorbis_header (AVFormatContext * s, int idx)
> return -1;
>
> st->codec->channels = bytestream_get_byte(&p);
> - st->codec->sample_rate = bytestream_get_le32(&p);
> + srate = bytestream_get_le32(&p);
> p += 4; // skip maximum bitrate
> st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate
> p += 4; // skip minimum bitrate
> @@ -249,8 +250,11 @@ vorbis_header (AVFormatContext * s, int idx)
> st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
> st->codec->codec_id = CODEC_ID_VORBIS;
>
> - st->time_base.num = 1;
> - st->time_base.den = st->codec->sample_rate;
> + if (srate > 0) {
> + st->codec->sample_rate = srate;
> + st->time_base.num = 1;
> + st->time_base.den = srate;
> + }
> } else if (os->buf[os->pstart] == 3) {
> if (os->psize > 8)
> ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
> --
> 1.7.4.rc2
I still want to know why common code doesn't catch this. Replicating
this check in each and every demuxer is insane.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list