This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 65fd5167686e8cf8489a271bf22fa9dc8c818a70 Author: Michael Niedermayer <[email protected]> AuthorDate: Sun Feb 8 01:28:16 2026 +0100 Commit: Michael Niedermayer <[email protected]> CommitDate: Tue Mar 3 01:10:09 2026 +0100 avcodec/adpcm: handle ADPCM_IMA_MAGIX like other similar codecs Fixes: out of array access Fixes: 471509958/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_ADPCM_IMA_MAGIX_DEC_fuzzer-4847227777646592 We ask for a mono sample because the implementation for mono is incomplete Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <[email protected]> --- libavcodec/adpcm.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 1502a5cb04..18bdc43b76 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -1218,7 +1218,6 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, case AV_CODEC_ID_ADPCM_AGM: case AV_CODEC_ID_ADPCM_IMA_ACORN: case AV_CODEC_ID_ADPCM_IMA_DAT4: - case AV_CODEC_ID_ADPCM_IMA_MAGIX: case AV_CODEC_ID_ADPCM_IMA_MOFLEX: case AV_CODEC_ID_ADPCM_IMA_ISS: header_size = 4 * ch; break; case AV_CODEC_ID_ADPCM_IMA_SMJPEG: header_size = 4 * ch; break; @@ -1315,6 +1314,15 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, buf_size = FFMIN(buf_size, avctx->block_align); nb_samples = (buf_size - 4 * ch) * 2 / ch; break; + case AV_CODEC_ID_ADPCM_IMA_MAGIX: + if (avctx->block_align > 0) + buf_size = FFMIN(buf_size, avctx->block_align); + nb_samples = (buf_size - 4 * ch) * 2 / ch; + if (ch == 1) { + avpriv_request_sample(avctx, "mono ADPCM Magix"); + return AVERROR_PATCHWELCOME; + } + break; CASE(ADPCM_IMA_WAV, int bsize = ff_adpcm_ima_block_sizes[avctx->bits_per_coded_sample - 2]; int bsamples = ff_adpcm_ima_block_samples[avctx->bits_per_coded_sample - 2]; @@ -1799,7 +1807,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame, } } - for (int m = 0; m < avctx->block_align-8; m += 8) { + for (int m = 0; m < channels*nb_samples/16; m ++) { uint32_t v0 = bytestream2_get_le32u(&gb); uint32_t v1 = bytestream2_get_le32u(&gb); _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
