avcodec/dxv: Check that there is enough data to decompress
authorMichael Niedermayer <michael@niedermayer.cc>
Sat, 1 Dec 2018 20:41:01 +0000 (21:41 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 8 Dec 2018 16:01:03 +0000 (17:01 +0100)
Fixes: Timeout
Fixes: 10979/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DXV_fuzzer-6178582203203584

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/dxv.c

index 08aca73..bf53d7d 100644 (file)
@@ -1192,6 +1192,12 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
     ret = decompress_tex(avctx);
     if (ret < 0)
         return ret;
+    {
+        int w_block = avctx->coded_width / ctx->texture_block_w;
+        int h_block = avctx->coded_height / ctx->texture_block_h;
+        if (w_block * h_block * ctx->tex_step > ctx->tex_size * 8LL)
+            return AVERROR_INVALIDDATA;
+    }
 
     tframe.f = data;
     ret = ff_thread_get_buffer(avctx, &tframe, 0);