Ignore blocks with no samples and flags (but usually with MD5 sum)

Originally committed as revision 6694 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Kostya Shishkov 2006-10-15 04:50:19 +00:00
parent 3d0c32d4a9
commit a8789714ba
2 changed files with 4 additions and 3 deletions

View File

@ -388,6 +388,7 @@ static int wavpack_decode_frame(AVCodecContext *avctx,
memset(s->decorr, 0, MAX_TERMS * sizeof(Decorr)); memset(s->decorr, 0, MAX_TERMS * sizeof(Decorr));
s->samples = LE_32(buf); buf += 4; s->samples = LE_32(buf); buf += 4;
if(!s->samples) return buf_size;
/* should not happen but who knows */ /* should not happen but who knows */
if(s->samples * 2 * avctx->channels > AVCODEC_MAX_AUDIO_FRAME_SIZE){ if(s->samples * 2 * avctx->channels > AVCODEC_MAX_AUDIO_FRAME_SIZE){
av_log(avctx, AV_LOG_ERROR, "Packet size is too big to be handled in lavc!\n"); av_log(avctx, AV_LOG_ERROR, "Packet size is too big to be handled in lavc!\n");

View File

@ -118,15 +118,15 @@ static int wv_read_block_header(AVFormatContext *ctx, ByteIOContext *pb)
if(!wc->chan) wc->chan = chan; if(!wc->chan) wc->chan = chan;
if(!wc->rate) wc->rate = rate; if(!wc->rate) wc->rate = rate;
if(bpp != wc->bpp){ if(wc->flags && bpp != wc->bpp){
av_log(ctx, AV_LOG_ERROR, "Bits per sample differ, this block: %i, header block: %i\n", bpp, wc->bpp); av_log(ctx, AV_LOG_ERROR, "Bits per sample differ, this block: %i, header block: %i\n", bpp, wc->bpp);
return -1; return -1;
} }
if(chan != wc->chan){ if(wc->flags && chan != wc->chan){
av_log(ctx, AV_LOG_ERROR, "Channels differ, this block: %i, header block: %i\n", chan, wc->chan); av_log(ctx, AV_LOG_ERROR, "Channels differ, this block: %i, header block: %i\n", chan, wc->chan);
return -1; return -1;
} }
if(rate != wc->rate){ if(wc->flags && rate != wc->rate){
av_log(ctx, AV_LOG_ERROR, "Sampling rate differ, this block: %i, header block: %i\n", rate, wc->rate); av_log(ctx, AV_LOG_ERROR, "Sampling rate differ, this block: %i, header block: %i\n", rate, wc->rate);
return -1; return -1;
} }