From 1d5b35cc07c72c3359042a2f13f879cfb2ef549b Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 16 Feb 2013 06:07:49 -0300 Subject: [PATCH] lavc/flacdec: Add frame CRC calculation Fixes ticket #2266 Signed-off-by: James Almer --- libavcodec/flacdec.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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;