diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2022-03-17 22:52:52 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2022-03-18 12:31:32 +0100 |
commit | b59ea948cdcb8422964595c32076312756550f17 (patch) | |
tree | 6a5aeb49ac82474f765683f5166944db61d14cbe | |
parent | b6af56c034759b81985f8ea094e41cbd5f7fecfb (diff) | |
download | ffmpeg-b59ea948cdcb8422964595c32076312756550f17.tar.gz |
avcodec/dfpwmdec: Check packet size more completely
Fixes: out of array access
Fixes: 45497/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DFPWM_fuzzer-5239786212818944.fuzz
Fixes: 45510/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DFPWM_fuzzer-4947856883056640
Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libavcodec/dfpwmdec.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/dfpwmdec.c b/libavcodec/dfpwmdec.c index 27b60a4ea4..e11f393ee4 100644 --- a/libavcodec/dfpwmdec.c +++ b/libavcodec/dfpwmdec.c @@ -106,7 +106,10 @@ static int dfpwm_dec_frame(struct AVCodecContext *ctx, void *data, AVFrame *frame = data; int ret; - frame->nb_samples = packet->size * 8 / ctx->ch_layout.nb_channels; + if (packet->size * 8LL % ctx->ch_layout.nb_channels) + return AVERROR_PATCHWELCOME; + + frame->nb_samples = packet->size * 8LL / ctx->ch_layout.nb_channels; if (frame->nb_samples <= 0) { av_log(ctx, AV_LOG_ERROR, "invalid number of samples in packet\n"); return AVERROR_INVALIDDATA; |