Skip to content

Commit

Permalink
avformat/hlsenc: fix segfault when using -hls_segment_type fmp4 with …
Browse files Browse the repository at this point in the history
…-hls_segment_filename

previously, specifying -hls_segment_filename meant
s->base_output_dirname was never set, causing a segfault:

(lldb) bt
* thread ksvc#1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x00007fffbf7d82d0 libsystem_platform.dylib`_platform_strcmp + 80
frame ksvc#1: 0x00000001005f4dcf libavformat.57.dylib`io_open_default(s=0x000000010481cc00, pb=0x0000000104806020, url=0x0000000000000000, flags=2, options=0x0000000000000000) at options.c:107
frame ksvc#2: 0x0000000100528968 libavformat.57.dylib`hls_mux_init(s=0x000000010481cc00) at hlsenc.c:595
frame ksvc#3: 0x00000001005273cb libavformat.57.dylib`hls_write_header(s=0x000000010481cc00) at hlsenc.c:1518
frame ksvc#4: 0x00000001005c08d0 libavformat.57.dylib`write_header_internal(s=0x000000010481cc00) at mux.c:486
frame ksvc#5: 0x00000001005c0774 libavformat.57.dylib`avformat_write_header(s=0x000000010481cc00, options=0x00000001029026e8) at mux.c:539
  • Loading branch information
tmm1 authored and T-bagwell committed Sep 16, 2017
1 parent 42a41c3 commit 73bf0f4
Showing 1 changed file with 23 additions and 22 deletions.
45 changes: 23 additions & 22 deletions libavformat/hlsenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1441,32 +1441,33 @@ static int hls_write_header(AVFormatContext *s)
} else {
av_strlcat(hls->basename, pattern, basename_size);
}
}

if (av_strcasecmp(hls->fmp4_init_filename, "init.mp4")) {
int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1;
hls->base_output_dirname = av_malloc(fmp4_init_filename_len);
if (!hls->base_output_dirname) {
ret = AVERROR(ENOMEM);
goto fail;
}
av_strlcpy(hls->base_output_dirname, hls->fmp4_init_filename, fmp4_init_filename_len);
} else {
hls->base_output_dirname = av_malloc(basename_size);
if (!hls->base_output_dirname) {
ret = AVERROR(ENOMEM);
goto fail;
}
if (av_strcasecmp(hls->fmp4_init_filename, "init.mp4")) {
int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1;
hls->base_output_dirname = av_malloc(fmp4_init_filename_len);
if (!hls->base_output_dirname) {
ret = AVERROR(ENOMEM);
goto fail;
}
av_strlcpy(hls->base_output_dirname, hls->fmp4_init_filename, fmp4_init_filename_len);
} else {
hls->base_output_dirname = av_malloc(basename_size);
if (!hls->base_output_dirname) {
ret = AVERROR(ENOMEM);
goto fail;
}

av_strlcpy(hls->base_output_dirname, s->filename, basename_size);
p = strrchr(hls->base_output_dirname, '/');
if (p) {
*(p + 1) = '\0';
av_strlcat(hls->base_output_dirname, hls->fmp4_init_filename, basename_size);
} else {
av_strlcpy(hls->base_output_dirname, hls->fmp4_init_filename, basename_size);
}
av_strlcpy(hls->base_output_dirname, s->filename, basename_size);
p = strrchr(hls->base_output_dirname, '/');
if (p) {
*(p + 1) = '\0';
av_strlcat(hls->base_output_dirname, hls->fmp4_init_filename, basename_size);
} else {
av_strlcpy(hls->base_output_dirname, hls->fmp4_init_filename, basename_size);
}
}

if (!hls->use_localtime) {
ret = sls_flag_check_duration_size_index(hls);
if (ret < 0) {
Expand Down

0 comments on commit 73bf0f4

Please sign in to comment.