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

avformat/flvdec: don't leak extradata pointer on realloc failure

This commit is contained in:
Timo Rothenpieler
2025-01-07 19:17:54 +01:00
parent 9201f872b1
commit af74fe7139

View File

@@ -975,18 +975,22 @@ static int flv_queue_extradata(FLVContext *flv, AVIOContext *pb, int stream,
int new_count = stream + 1; int new_count = stream + 1;
if (flv->mt_extradata_cnt < new_count) { if (flv->mt_extradata_cnt < new_count) {
flv->mt_extradata = av_realloc(flv->mt_extradata, void *tmp = av_realloc_array(flv->mt_extradata, new_count,
sizeof(*flv->mt_extradata) * sizeof(*flv->mt_extradata));
new_count); if (!tmp)
flv->mt_extradata_sz = av_realloc(flv->mt_extradata_sz,
sizeof(*flv->mt_extradata_sz) *
new_count);
if (!flv->mt_extradata || !flv->mt_extradata_sz)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
flv->mt_extradata = tmp;
tmp = av_realloc_array(flv->mt_extradata_sz, new_count,
sizeof(*flv->mt_extradata_sz));
if (!tmp)
return AVERROR(ENOMEM);
flv->mt_extradata_sz = tmp;
// Set newly allocated pointers/sizes to 0 // Set newly allocated pointers/sizes to 0
for (int i = flv->mt_extradata_cnt; i < new_count; i++) { for (int i = flv->mt_extradata_cnt; i < new_count; i++) {
flv->mt_extradata[i] = NULL; flv->mt_extradata[i] = NULL;
flv->mt_extradata_sz[i] = 0; flv->mt_extradata_sz[i] = 0;
} }
flv->mt_extradata_cnt = new_count; flv->mt_extradata_cnt = new_count;
} }