Pārlūkot izejas kodu

avcodec/rv60dec: Check ofs for overflows

Fixes: signed integer overflow: 30 + 2147483647 cannot be represented in type 'int'
Fixes: 418335931/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_RV60_fuzzer-6568264620900352

Reviewed-by: Peter Ross <pross@xvid.org>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Michael Niedermayer 4 mēneši atpakaļ
vecāks
revīzija
ecbe3e7366
1 mainītis faili ar 3 papildinājumiem un 1 dzēšanām
  1. 3 1
      libavcodec/rv60dec.c

+ 3 - 1
libavcodec/rv60dec.c

@@ -2347,10 +2347,12 @@ static int rv60_decode_frame(AVCodecContext *avctx, AVFrame * frame,
     ofs = get_bits_count(&gb) / 8;
 
     for (int i = 0; i < s->cu_height; i++) {
-        if (header_size + ofs >= avpkt->size)
+        if (ofs >= avpkt->size - header_size)
             return AVERROR_INVALIDDATA;
         s->slice[i].data = avpkt->data + header_size + ofs;
         s->slice[i].data_size = FFMIN(s->slice[i].size, avpkt->size - header_size - ofs);
+        if (s->slice[i].size > INT32_MAX - ofs)
+            return AVERROR_INVALIDDATA;
         ofs += s->slice[i].size;
     }