diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2018-02-27 15:17:12 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2018-03-12 01:32:42 +0100 |
commit | 8ee3265dbe2e85537affe3b3055b00ba8646aa70 (patch) | |
tree | 43694352ef08fa861e8ed8575012c2054365f49c | |
parent | 64c9ce0abc0fd8774b523afda3ddb17c86caa86a (diff) |
avcodec/nuv: Check for minimum input size for uncomprssed and rtjpeg
Fixes: Timeout
Fixes: 6297/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_NUV_fuzzer-4882404863901696
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libavcodec/nuv.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libavcodec/nuv.c b/libavcodec/nuv.c index ad6c029e50..8d806dbbff 100644 --- a/libavcodec/nuv.c +++ b/libavcodec/nuv.c @@ -161,6 +161,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, int orig_size = buf_size; int keyframe, ret; int size_change = 0; + int minsize = 0; int result, init_frame = !avctx->frame_number; enum { NUV_UNCOMPRESSED = '0', @@ -206,6 +207,16 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, keyframe = 1; break; } + switch (comptype) { + case NUV_UNCOMPRESSED: + minsize = c->width * c->height * 3 / 2; + break; + case NUV_RTJPEG: + minsize = c->width/16 * (c->height/16) * 6; + break; + } + if (buf_size < minsize / 4) + return AVERROR_INVALIDDATA; retry: // Skip the rest of the frame header. buf = &buf[12]; |