1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/mjpegenc: Don't allocate unnecessarily much memory

We need to allocate space for 64 coefficients per block;
24dbc4c2e8 wanted to
perform the calculation 64*sizeof(MJpegHuffmanCode)
at compile time, yet in the end did it in a way that
made it allocate 64 times as much memory as needed.

Reported-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2025-03-27 03:03:02 +01:00
parent 114fccc4a5
commit 2ac2485c1f

View File

@ -291,13 +291,12 @@ static int alloc_huffman(MJPEGEncContext *const m2)
static const char blocks_per_mb[] = { static const char blocks_per_mb[] = {
[CHROMA_420] = 6, [CHROMA_422] = 8, [CHROMA_444] = 12 [CHROMA_420] = 6, [CHROMA_422] = 8, [CHROMA_444] = 12
}; };
size_t num_blocks, num_codes; size_t num_blocks;
// Make sure we have enough space to hold this frame. // Make sure we have enough space to hold this frame.
num_blocks = s->c.mb_num * blocks_per_mb[s->c.chroma_format]; num_blocks = s->c.mb_num * blocks_per_mb[s->c.chroma_format];
num_codes = num_blocks * 64;
m->huff_buffer = av_malloc_array(num_codes, m->huff_buffer = av_malloc_array(num_blocks,
64 /* codes per MB */ * sizeof(MJpegHuffmanCode)); 64 /* codes per MB */ * sizeof(MJpegHuffmanCode));
if (!m->huff_buffer) if (!m->huff_buffer)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);