mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2025-01-30 00:22:44 +00:00
avformat/utils: make av_url_split search for hashmark as well to separate 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 <cus@passwd.hu>
This commit is contained in:
parent
365b817b51
commit
554576b6cf
@ -75,6 +75,7 @@ int main(void)
|
|||||||
test2("https://1l-lh.a.net/i/1LIVE_HDS@179577/master.m3u8");
|
test2("https://1l-lh.a.net/i/1LIVE_HDS@179577/master.m3u8");
|
||||||
test2("ftp://u:p%2B%2F2@ftp.pbt.com/ExportHD.mpg");
|
test2("ftp://u:p%2B%2F2@ftp.pbt.com/ExportHD.mpg");
|
||||||
test2("https://key.dns.com?key_id=2&model_id=12345&&access_key=");
|
test2("https://key.dns.com?key_id=2&model_id=12345&&access_key=");
|
||||||
|
test2("http://example.com#tag");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4786,7 +4786,7 @@ void av_url_split(char *proto, int proto_size,
|
|||||||
char *hostname, int hostname_size,
|
char *hostname, int hostname_size,
|
||||||
int *port_ptr, char *path, int path_size, const char *url)
|
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)
|
if (port_ptr)
|
||||||
*port_ptr = -1;
|
*port_ptr = -1;
|
||||||
@ -4814,16 +4814,8 @@ void av_url_split(char *proto, int proto_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* separate path from hostname */
|
/* separate path from hostname */
|
||||||
ls = strchr(p, '/');
|
ls = p + strcspn(p, "/?#");
|
||||||
ls2 = strchr(p, '?');
|
|
||||||
if (!ls)
|
|
||||||
ls = ls2;
|
|
||||||
else if (ls && ls2)
|
|
||||||
ls = FFMIN(ls, ls2);
|
|
||||||
if (ls)
|
|
||||||
av_strlcpy(path, ls, path_size);
|
av_strlcpy(path, ls, path_size);
|
||||||
else
|
|
||||||
ls = &p[strlen(p)]; // XXX
|
|
||||||
|
|
||||||
/* the rest is hostname, use that to parse auth/port */
|
/* the rest is hostname, use that to parse auth/port */
|
||||||
if (ls != p) {
|
if (ls != p) {
|
||||||
|
@ -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
|
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%2F2@ftp.pbt.com/ExportHD.mpg => ftp u:p%2B%2F2 ftp.pbt.com -1 /ExportHD.mpg
|
ftp://u:p%2B%2F2@ftp.pbt.com/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=
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user