]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/cfhd: check if band encoding is valid
authorPaul B Mahol <onemda@gmail.com>
Sun, 9 Aug 2020 09:00:07 +0000 (11:00 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sun, 9 Aug 2020 16:47:28 +0000 (18:47 +0200)
Also simplify lossless check as value of 5 for band encoding
always specify lossless mode.

libavcodec/cfhd.c

index 088ab42355192fc07abaa673ca0a32679d19e111..759c85004cc0f2e09756c0a1815db9ad46c9a235 100644 (file)
@@ -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;