Commit 394ff4c5 authored by rtognimp's avatar rtognimp

Vorbis specs requires blocksize_1 >= blocksize_0, error if it's false.

Predict buffer size from blocksize_1 and number of channels and make
sure this does not exceed AVCODEC_MAX_AUDIO_FRAME_SIZE

Patch by Uoti Urpala >>> uoti |.| urpala |@| pp1 |.| inet |.| fi <<<


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@5313 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 1d4329ba
......@@ -872,10 +872,17 @@ static int vorbis_parse_id_hdr(vorbis_context *vc){
bl1=get_bits(gb, 4);
vc->blocksize_0=(1<<bl0);
vc->blocksize_1=(1<<bl1);
if (bl0>13 || bl0<6 || bl1>13 || bl1<6) {
if (bl0>13 || bl0<6 || bl1>13 || bl1<6 || bl1<bl0) {
av_log(vc->avccontext, AV_LOG_ERROR, " Vorbis id header packet corrupt (illegal blocksize). \n");
return 3;
}
// output format int16
if (vc->blocksize_1/2 * vc->audio_channels * 2 >
AVCODEC_MAX_AUDIO_FRAME_SIZE) {
av_log(vc->avccontext, AV_LOG_ERROR, "Vorbis channel count makes "
"output packets too large.\n");
return 4;
}
vc->swin=vwin[bl0-6];
vc->lwin=vwin[bl1-6];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment