From 8c7ea0c3449a3540302c58bffdbcb428ea32eb1d Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sun, 9 Aug 2020 11:00:07 +0200 Subject: [PATCH] avcodec/cfhd: check if band encoding is valid Also simplify lossless check as value of 5 for band encoding always specify lossless mode. --- libavcodec/cfhd.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 088ab42355..759c85004c 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -523,6 +523,11 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, s->prescale_shift[2] = (data >> 6) & 0x7; av_log(avctx, AV_LOG_DEBUG, "Prescale shift (VC-5): %x\n", data); } else if (tag == BandEncoding) { + if (!data || data > 5) { + av_log(avctx, AV_LOG_ERROR, "Invalid band encoding\n"); + ret = AVERROR(EINVAL); + break; + } s->band_encoding = data; av_log(avctx, AV_LOG_DEBUG, "Encode Method for Subband %d : %x\n", s->subband_num_actual, data); } else if (tag == LowpassWidth) { @@ -814,8 +819,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, { OPEN_READER(re, &s->gb); - const int lossless = (s->sample_type == 2 || s->sample_type == 3 || s->frame_type) && - s->subband_num_actual == 7 && s->band_encoding == 5; + const int lossless = s->band_encoding == 5; if (s->codebook == 0 && s->transform_type == 2 && s->subband_num_actual == 7) s->codebook = 1;