mirror of https://git.ffmpeg.org/ffmpeg.git
oggparsevorbis: check channels
Fixes out of array accesses Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
2f7465b5bf
commit
1d29624c73
|
@ -230,6 +230,7 @@ vorbis_header (AVFormatContext * s, int idx)
|
||||||
const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */
|
const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */
|
||||||
unsigned blocksize, bs0, bs1;
|
unsigned blocksize, bs0, bs1;
|
||||||
int srate;
|
int srate;
|
||||||
|
int channels;
|
||||||
|
|
||||||
if (os->psize != 30)
|
if (os->psize != 30)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -237,7 +238,12 @@ vorbis_header (AVFormatContext * s, int idx)
|
||||||
if (bytestream_get_le32(&p) != 0) /* vorbis_version */
|
if (bytestream_get_le32(&p) != 0) /* vorbis_version */
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
st->codec->channels = bytestream_get_byte(&p);
|
channels= bytestream_get_byte(&p);
|
||||||
|
if (st->codec->channels && channels != st->codec->channels) {
|
||||||
|
av_log(s, AV_LOG_ERROR, "Channel change is not supported\n");
|
||||||
|
return AVERROR_PATCHWELCOME;
|
||||||
|
}
|
||||||
|
st->codec->channels = channels;
|
||||||
srate = bytestream_get_le32(&p);
|
srate = bytestream_get_le32(&p);
|
||||||
p += 4; // skip maximum bitrate
|
p += 4; // skip maximum bitrate
|
||||||
st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate
|
st->codec->bit_rate = bytestream_get_le32(&p); // nominal bitrate
|
||||||
|
|
Loading…
Reference in New Issue