From: Rémi Denis-Courmont Date: Thu, 27 Nov 2008 18:36:43 +0000 (+0200) Subject: httpd: full URL is also valid for HTTP (fixes #2320) X-Git-Tag: 1.0.0-pre1~2008 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=a40078c86eac6ad595e26271e9eb636eedccdcd4;p=vlc httpd: full URL is also valid for HTTP (fixes #2320) Also skip URI authority properly. --- diff --git a/src/network/httpd.c b/src/network/httpd.c index 11490570ed..4dce0e8ec2 100644 --- a/src/network/httpd.c +++ b/src/network/httpd.c @@ -1743,12 +1743,16 @@ static void httpd_ClientRecv( httpd_client_t *cl ) { *p2++ = '\0'; } - if( !strncasecmp( p, "rtsp:", 5 ) ) - { - /* for rtsp url, you have rtsp://localhost:port/path */ - p += 5; - while( *p == '/' ) p++; - while( *p && *p != '/' ) p++; + if( !strncasecmp( p, ( cl->query.i_proto + == HTTPD_PROTO_HTTP ) ? "http" : "rtsp", 4 ) + && p[4 + !!strchr( "sS", p[4] )] == ':' ) + { /* Skip hier-part of URL (if present) */ + p = strchr( p, ':' ) + 1; /* skip URI scheme */ + if( !strncmp( p, "//", 2 ) ) /* skip authority */ + { /* see RFC3986 §3.2 */ + p += 2; + while( *p && !strchr( "/?#", *p ) ) p++; + } } cl->query.psz_url = strdup( p ); if( ( p3 = strchr( cl->query.psz_url, '?' ) ) )