Browse Source

avformat/segment: Fix leak of duration/framenumber lists upon error

The code to free them is not in the segment muxer's deinit function,
but in its write_trailer function which means that these lists leak if
write_trailer isn't called after their allocation. This happens e.g. if
the given lists are invalid (e.g. consisting only of ',' (which delimit
entries)), so that parsing them fails and so does the muxer's init
function; write_trailer is then never called.

This has been fixed by moving the code to free them to the deinit
function.

Reviewed-by: Ridley Combs <rcombs@rcombs.me>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
tags/n4.4
Andreas Rheinhardt 5 years ago
parent
commit
4b836c8613
1 changed files with 2 additions and 2 deletions
  1. +2
    -2
      libavformat/segment.c

+ 2
- 2
libavformat/segment.c View File

@@ -663,6 +663,8 @@ static void seg_free(AVFormatContext *s)
ff_format_io_close(seg->avf, &seg->list_pb);
avformat_free_context(seg->avf);
seg->avf = NULL;
av_freep(&seg->times);
av_freep(&seg->frames);
}

static int seg_init(AVFormatContext *s)
@@ -991,8 +993,6 @@ fail:
ff_format_io_close(s, &seg->list_pb);

av_opt_free(seg);
av_freep(&seg->times);
av_freep(&seg->frames);
av_freep(&seg->cur_entry.filename);

cur = seg->segment_list_entries;


Loading…
Cancel
Save