Mercurial > libavformat.hg
comparison oggparsevorbis.c @ 2597:eb7808a9d361 libavformat
check values more thoroughly in vorbis_header()
author | mru |
---|---|
date | Wed, 10 Oct 2007 22:59:36 +0000 |
parents | 9e91148f1d44 |
children | a004bd730f70 |
comparison
equal
deleted
inserted
replaced
2596:9e91148f1d44 | 2597:eb7808a9d361 |
---|---|
181 priv = os->private; | 181 priv = os->private; |
182 priv->len[os->seq] = os->psize; | 182 priv->len[os->seq] = os->psize; |
183 priv->packet[os->seq] = av_mallocz(os->psize); | 183 priv->packet[os->seq] = av_mallocz(os->psize); |
184 memcpy(priv->packet[os->seq], os->buf + os->pstart, os->psize); | 184 memcpy(priv->packet[os->seq], os->buf + os->pstart, os->psize); |
185 if (os->buf[os->pstart] == 1) { | 185 if (os->buf[os->pstart] == 1) { |
186 uint8_t *p = os->buf + os->pstart + 11; //skip up to the audio channels | 186 uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */ |
187 unsigned blocksize, bs0, bs1; | |
187 | 188 |
188 if (os->psize != 30) | 189 if (os->psize != 30) |
190 return -1; | |
191 | |
192 if (bytestream_get_le32(&p) != 0) /* vorbis_version */ | |
189 return -1; | 193 return -1; |
190 | 194 |
191 st->codec->channels = bytestream_get_byte(&p); | 195 st->codec->channels = bytestream_get_byte(&p); |
192 st->codec->sample_rate = bytestream_get_le32(&p); | 196 st->codec->sample_rate = bytestream_get_le32(&p); |
193 p += 4; // skip maximum bitrate | 197 p += 4; // skip maximum bitrate |
194 st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate | 198 st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate |
199 p += 4; // skip minimum bitrate | |
200 | |
201 blocksize = bytestream_get_byte(&p); | |
202 bs0 = blocksize & 15; | |
203 bs1 = blocksize >> 4; | |
204 | |
205 if (bs0 > bs1) | |
206 return -1; | |
207 if (bs0 < 6 || bs1 > 13) | |
208 return -1; | |
209 | |
210 if (bytestream_get_byte(&p) != 1) /* framing_flag */ | |
211 return -1; | |
195 | 212 |
196 st->codec->codec_type = CODEC_TYPE_AUDIO; | 213 st->codec->codec_type = CODEC_TYPE_AUDIO; |
197 st->codec->codec_id = CODEC_ID_VORBIS; | 214 st->codec->codec_id = CODEC_ID_VORBIS; |
198 | 215 |
199 st->time_base.num = 1; | 216 st->time_base.num = 1; |