From 8a670f52a56ba01bdb62b91b020573b217e40fb3 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Sat, 1 Mar 2014 12:13:11 +0100 Subject: [PATCH] lavf/concatdec: more reliable test for absolute URLs. ff_make_absolute_url() recognizes the "://" pattern usual in HTTP-like protocols, but consider relative URLs starting with just the protocol name or using the comma syntax for options. --- libavformat/concatdec.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index 979499af0c..99f0b6881f 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -85,18 +85,29 @@ static int add_file(AVFormatContext *avf, char *filename, ConcatFile **rfile, ConcatContext *cat = avf->priv_data; ConcatFile *file; char *url = NULL; - size_t url_len; + const char *proto; + size_t url_len, proto_len; int ret; if (cat->safe > 0 && !safe_filename(filename)) { av_log(avf, AV_LOG_ERROR, "Unsafe file name '%s'\n", filename); FAIL(AVERROR(EPERM)); } + + proto = avio_find_protocol_name(filename); + proto_len = proto ? strlen(proto) : 0; + if (!memcmp(filename, proto, proto_len) && + (filename[proto_len] == ':' || filename[proto_len] == ',')) { + url = filename; + filename = NULL; + } else { + /* TODO reindent */ url_len = strlen(avf->filename) + strlen(filename) + 16; if (!(url = av_malloc(url_len))) FAIL(AVERROR(ENOMEM)); ff_make_absolute_url(url, url_len, avf->filename, filename); av_freep(&filename); + } if (cat->nb_files >= *nb_files_alloc) { size_t n = FFMAX(*nb_files_alloc * 2, 16);