diff --git a/libavformat/utils.c b/libavformat/utils.c index 264b5b1a4b..b3ff9e95eb 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3167,15 +3167,19 @@ static int compute_chapters_end(AVFormatContext *s) { unsigned int i; int64_t max_time = 0; - AVChapter **timetable = av_malloc(s->nb_chapters * sizeof(*timetable)); + AVChapter **timetable; - if (!timetable) - return AVERROR(ENOMEM); + if (!s->nb_chapters) + return 0; if (s->duration > 0 && s->start_time < INT64_MAX - s->duration) max_time = s->duration + ((s->start_time == AV_NOPTS_VALUE) ? 0 : s->start_time); + timetable = av_malloc(s->nb_chapters * sizeof(*timetable)); + if (!timetable) + return AVERROR(ENOMEM); + for (i = 0; i < s->nb_chapters; i++) timetable[i] = s->chapters[i]; qsort(timetable, s->nb_chapters, sizeof(*timetable), chapter_start_cmp);