You've already forked FFmpeg
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user