avcodec/dxtory: Check slice sizes before allocating image
Fixes: Timeout (26sec -> 2sec) Fixes: 13612/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DXTORY_fuzzer-5676845977042944 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -272,10 +272,11 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic,
|
||||
setup_lru_func setup_lru,
|
||||
enum AVPixelFormat fmt)
|
||||
{
|
||||
GetByteContext gb;
|
||||
GetByteContext gb, gb_check;
|
||||
GetBitContext gb2;
|
||||
int nslices, slice, line = 0;
|
||||
uint32_t off, slice_size;
|
||||
uint64_t off_check;
|
||||
uint8_t lru[3][8];
|
||||
int ret;
|
||||
|
||||
@@ -283,6 +284,13 @@ static int dxtory_decode_v2(AVCodecContext *avctx, AVFrame *pic,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
off_check = off;
|
||||
gb_check = gb;
|
||||
for (slice = 0; slice < nslices; slice++)
|
||||
off_check += bytestream2_get_le32(&gb_check);
|
||||
if (off_check - avctx->discard_damaged_percentage*off_check/100 > src_size)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
avctx->pix_fmt = fmt;
|
||||
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user