From 0a1e3d86852bc6267a622b9ec442c4a3ea9d66d9 Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Sun, 1 Oct 2023 15:54:39 -0500 Subject: demux: move parent_stream_info before the goto Previously if the demuxer didn't exist, then it could jump down and try to free sinfo.filename before it was ever set thus segfaulting. Just always set the struct unconditionally so we're always sure to free it. --- demux/demux.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/demux/demux.c b/demux/demux.c index 2b1e670b28..d3da4a0fd1 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -3388,6 +3388,15 @@ static struct demuxer *demux_open(struct stream *stream, struct demuxer *demuxer = NULL; char *force_format = params ? params->force_format : NULL; + struct parent_stream_info sinfo = { + .seekable = stream->seekable, + .is_network = stream->is_network, + .is_streaming = stream->streaming, + .stream_origin = stream->stream_origin, + .cancel = cancel, + .filename = talloc_strdup(NULL, stream->url), + }; + if (!force_format) force_format = stream->demuxer; @@ -3409,15 +3418,6 @@ static struct demuxer *demux_open(struct stream *stream, } } - struct parent_stream_info sinfo = { - .seekable = stream->seekable, - .is_network = stream->is_network, - .is_streaming = stream->streaming, - .stream_origin = stream->stream_origin, - .cancel = cancel, - .filename = talloc_strdup(NULL, stream->url), - }; - // Test demuxers from first to last, one pass for each check_levels[] entry for (int pass = 0; check_levels[pass] != -1; pass++) { enum demux_check level = check_levels[pass]; -- cgit v1.2.3