This commit closes trac ticket 10679. Signed-off-by: Timothy Allen <t...@treehouse.org.za> --- libavformat/tests/url.c | 8 +++++++- libavformat/url.c | 8 +++++++- tests/ref/fate/url | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/libavformat/tests/url.c b/libavformat/tests/url.c index 8644a3e826..8bc3aab6be 100644 --- a/libavformat/tests/url.c +++ b/libavformat/tests/url.c @@ -148,9 +148,15 @@ int main(void) test("http://a/b", "//srv/shr/file"); test("http://a/b", "d:\\file"); test("http://a/b", "C:/file"); + test("http://a:b/c/d;p?q", "e"); // http://a:b/c/e + test("http://a:b/c/d;p?q", "e:f/g"); // http://a:d/c/e:f/g + test("http://u:w@a:p/b/c/d", "e"); // http://u:w@a/b/c/e + test("http://u:w@a:p/b/c/d", "/e"); // http://u:w@a/e + test("", "g:h"); // g:h + test("http://a/b/c/d;p?q", "g:h"); // http://a/b/c/g:h /* From https://tools.ietf.org/html/rfc3986#section-5.4 */ - test("http://a/b/c/d;p?q", "g:h"); // g:h + //test("http://a/b/c/d;p?q", "g:h"); // g:h test("http://a/b/c/d;p?q", "g"); // http://a/b/c/g test("http://a/b/c/d;p?q", "./g"); // http://a/b/c/g test("http://a/b/c/d;p?q", "g/"); // http://a/b/c/g/ diff --git a/libavformat/url.c b/libavformat/url.c index d5dd6a4666..abcd3d2366 100644 --- a/libavformat/url.c +++ b/libavformat/url.c @@ -100,7 +100,13 @@ int ff_url_decompose(URLComponents *uc, const char *url, const char *end) /* scheme */ uc->scheme = cur; p = find_delim(":/?#", cur, end); /* lavf "schemes" can contain options but not some RFC 3986 delimiters */ - if (*p == ':') + /* A colon can indicate a separator for the scheme + (https://host/), or the userinfo (user:pass@host/), or + the host/port (host:port). It can also be valid within the + path. To distinguish the scheme, require it to be followed + by a slash to indicate the scheme. + */ + if (*p == ':' && (p[1] == '/' || p[1] == '\\' || p[1] == '.')) cur = p + 1; /* authority */ diff --git a/tests/ref/fate/url b/tests/ref/fate/url index 8489d10968..229f9815f5 100644 --- a/tests/ref/fate/url +++ b/tests/ref/fate/url @@ -99,7 +99,12 @@ Testing ff_make_absolute_url: http://a/b //srv/shr/file => http://srv/shr/file http://a/b d:\file => d:\file http://a/b C:/file => C:/file - http://a/b/c/d;p?q g:h => g:h + http://a:b/c/d;p?q e => http://a:b/c/e + http://a:b/c/d;p?q e:f/g => http://a:b/c/e:f/g + http://u:w@a:p/b/c/d e => http://u:w@a:p/b/c/e + http://u:w@a:p/b/c/d /e => http://u:w@a:p/e + g:h => g:h + http://a/b/c/d;p?q g:h => http://a/b/c/g:h http://a/b/c/d;p?q g => http://a/b/c/g http://a/b/c/d;p?q ./g => http://a/b/c/g http://a/b/c/d;p?q g/ => http://a/b/c/g/ -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".