You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02: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:
		| @@ -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, '?'); |     av_strlcpy(path, ls, path_size); | ||||||
|     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 |  | ||||||
|  |  | ||||||
|     /* 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user