diff options
author | bevis <javashu2012@gmail.com> | 2020-10-19 10:07:57 +0800 |
---|---|---|
committer | liuqi05 <liuqi05@kuaishou.com> | 2020-10-22 17:13:15 +0800 |
commit | de59826703a50f232ae5b1704fa02e446c270938 (patch) | |
tree | 6ec4f06cefcd95c2ea8cb1e9b817dc50b3c94c56 /libavformat | |
parent | 1bf86ee907709e37c0104908e56ec77d5d854c87 (diff) | |
download | ffmpeg-de59826703a50f232ae5b1704fa02e446c270938.tar.gz |
libavformat/hls: use local var url for log to avoid crash
During operation, the user exits and interrupts,
causing pls->segment to be released,
resulting in a null pointer crash
Signed-off-by: bevis <javashu2012@gmail.com>
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/hls.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c index 72e28ab94f..0a522a4595 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1979,17 +1979,18 @@ static int hls_read_header(AVFormatContext *s) pls->ctx->interrupt_callback = s->interrupt_callback; url = av_strdup(pls->segments[0]->url); ret = av_probe_input_buffer(&pls->pb, &in_fmt, url, NULL, 0, 0); - av_free(url); if (ret < 0) { /* Free the ctx - it isn't initialized properly at this point, * so avformat_close_input shouldn't be called. If * avformat_open_input fails below, it frees and zeros the * context, so it doesn't need any special treatment like this. */ - av_log(s, AV_LOG_ERROR, "Error when loading first segment '%s'\n", pls->segments[0]->url); + av_log(s, AV_LOG_ERROR, "Error when loading first segment '%s'\n", url); avformat_free_context(pls->ctx); pls->ctx = NULL; + av_free(url); goto fail; } + av_free(url); pls->ctx->pb = &pls->pb; pls->ctx->io_open = nested_io_open; pls->ctx->flags |= s->flags & ~AVFMT_FLAG_CUSTOM_IO; |