avconv: simplify memory allocation in copy_chapters
Make just a single reallocation per call instead of one reallocation per copied chapters. This fixes possible memory leaks on realloc failures. Also correct the allocation since it needs multiples of sizeof(AVChapter*) and not sizeof(AVChapter). Fixes CID700633 and CID700719.
This commit is contained in:
parent
4ffbe3f3a5
commit
18ff4d2020
12
avconv_opt.c
12
avconv_opt.c
@ -1085,8 +1085,14 @@ static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
|
||||
{
|
||||
AVFormatContext *is = ifile->ctx;
|
||||
AVFormatContext *os = ofile->ctx;
|
||||
AVChapter **tmp;
|
||||
int i;
|
||||
|
||||
tmp = av_realloc(os->chapters, sizeof(*os->chapters) * (is->nb_chapters + os->nb_chapters));
|
||||
if (!tmp)
|
||||
return AVERROR(ENOMEM);
|
||||
os->chapters = tmp;
|
||||
|
||||
for (i = 0; i < is->nb_chapters; i++) {
|
||||
AVChapter *in_ch = is->chapters[i], *out_ch;
|
||||
int64_t ts_off = av_rescale_q(ofile->start_time - ifile->ts_offset,
|
||||
@ -1112,11 +1118,7 @@ static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
|
||||
if (copy_metadata)
|
||||
av_dict_copy(&out_ch->metadata, in_ch->metadata, 0);
|
||||
|
||||
os->nb_chapters++;
|
||||
os->chapters = av_realloc(os->chapters, sizeof(AVChapter) * os->nb_chapters);
|
||||
if (!os->chapters)
|
||||
return AVERROR(ENOMEM);
|
||||
os->chapters[os->nb_chapters - 1] = out_ch;
|
||||
os->chapters[os->nb_chapters++] = out_ch;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user