Skip to content

Commit

Permalink
avformat/utils: make av_url_split search for hashmark as well to sepa…
Browse files Browse the repository at this point in the history
…rate hostname

RFC 3986 states that the generic syntax uses the slash ("/"), question mark
("?"), and number sign ("#") characters to delimit components that are
significant to the generic parser's hierarchical interpretation of an
identifier.

Signed-off-by: Marton Balint <[email protected]>
  • Loading branch information
cus committed Feb 15, 2020
1 parent 365b817 commit 554576b
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 11 deletions.
1 change: 1 addition & 0 deletions libavformat/tests/url.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ int main(void)
test2("https://1l-lh.a.net/i/1LIVE_HDS@179577/master.m3u8");
test2("ftp://u:p%2B%[email protected]/ExportHD.mpg");
test2("https://key.dns.com?key_id=2&model_id=12345&&access_key=");
test2("http://example.com#tag");

return 0;
}
14 changes: 3 additions & 11 deletions libavformat/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -4786,7 +4786,7 @@ void av_url_split(char *proto, int proto_size,
char *hostname, int hostname_size,
int *port_ptr, char *path, int path_size, const char *url)
{
const char *p, *ls, *ls2, *at, *at2, *col, *brk;
const char *p, *ls, *at, *at2, *col, *brk;

if (port_ptr)
*port_ptr = -1;
Expand Down Expand Up @@ -4814,16 +4814,8 @@ void av_url_split(char *proto, int proto_size,
}

/* separate path from hostname */
ls = strchr(p, '/');
ls2 = strchr(p, '?');
if (!ls)
ls = ls2;
else if (ls && ls2)
ls = FFMIN(ls, ls2);
if (ls)
av_strlcpy(path, ls, path_size);
else
ls = &p[strlen(p)]; // XXX
ls = p + strcspn(p, "/?#");
av_strlcpy(path, ls, path_size);

/* the rest is hostname, use that to parse auth/port */
if (ls != p) {
Expand Down
1 change: 1 addition & 0 deletions tests/ref/fate/url
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ http://server/foo/bar?param=value/with/slashes => http
https://1l-lh.a.net/i/1LIVE_HDS@179577/master.m3u8 => https 1l-lh.a.net -1 /i/1LIVE_HDS@179577/master.m3u8
ftp://u:p%2B%[email protected]/ExportHD.mpg => ftp u:p%2B%2F2 ftp.pbt.com -1 /ExportHD.mpg
https://key.dns.com?key_id=2&model_id=12345&&access_key= => https key.dns.com -1 ?key_id=2&model_id=12345&&access_key=
http://example.com#tag => http example.com -1 #tag

0 comments on commit 554576b

Please sign in to comment.