Commit 4b80a619 authored by Duncan Salerno's avatar Duncan Salerno Committed by Michael Niedermayer

Handle the following type of relative URL correctly:

http://a/b + //c/d = http://c/d
http://a/b?c + ?d = http://a/b?d
http://a/b?c/d + /e = http://a/e

Updated with feedback from Clément Bœsch
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent f75c5f07
......@@ -4467,17 +4467,23 @@ int ff_find_stream_index(AVFormatContext *s, int id)
void ff_make_absolute_url(char *buf, int size, const char *base,
const char *rel)
{
char *sep;
char *sep, *path_query;
/* Absolute path, relative to the current server */
if (base && strstr(base, "://") && rel[0] == '/') {
if (base != buf)
av_strlcpy(buf, base, size);
sep = strstr(buf, "://");
if (sep) {
sep += 3;
sep = strchr(sep, '/');
if (sep)
*sep = '\0';
/* Take scheme from base url */
if (rel[1] == '/')
sep[1] = '\0';
else {
/* Take scheme and host from base url */
sep += 3;
sep = strchr(sep, '/');
if (sep)
*sep = '\0';
}
}
av_strlcat(buf, rel, size);
return;
......@@ -4489,6 +4495,18 @@ void ff_make_absolute_url(char *buf, int size, const char *base,
}
if (base != buf)
av_strlcpy(buf, base, size);
/* Strip off any query string from base */
path_query = strchr(buf, '?');
if (path_query != NULL)
*path_query = '\0';
/* Is relative path just a new query part? */
if (rel[0] == '?') {
av_strlcat(buf, rel, size);
return;
}
/* Remove the file name from the base url */
sep = strrchr(buf, '/');
if (sep)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment