diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index f264d20cb9..91a25f02c4 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -533,7 +533,15 @@ static int flac_decode_frame(AVCodecContext *avctx, void *data, av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n"); return -1; } - bytes_read = (get_bits_count(&s->gb)+7)/8; + bytes_read = get_bits_count(&s->gb)/8; + + if ((s->avctx->err_recognition & AV_EF_CRCCHECK) && + av_crc(av_crc_get_table(AV_CRC_16_ANSI), + 0, buf, bytes_read)) { + av_log(s->avctx, AV_LOG_ERROR, "CRC error at PTS %"PRId64"\n", avpkt->pts); + if (s->avctx->err_recognition & AV_EF_EXPLODE) + return AVERROR_INVALIDDATA; + } /* get output buffer */ frame->nb_samples = s->blocksize;