diff options
author | Jonas Schnelli <jonas.schnelli@include7.ch> | 2011-11-24 23:28:54 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-11-24 23:31:19 +0100 |
commit | 2c905fd1f8200349667dc990a17daf37214700bf (patch) | |
tree | 2ca084e15c43f9c1ac1eff3a63da41ee62ac089b /lib/url.c | |
parent | 4403e82f32de9b339cdacea6989e4a827a7b3a02 (diff) |
query-part: ignore the URI part for given protocols
By setting PROTOPT_NOURLQUERY in the protocol handler struct, the
protocol will get the "query part" of the URL cut off before the data is
handled by the protocol-specific code. This makes libcurl adhere to
RFC3986 section 2.2.
Test 1220 is added to verify a file:// URL with query-part.
Diffstat (limited to 'lib/url.c')
-rw-r--r-- | lib/url.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -4824,6 +4824,25 @@ static CURLcode create_conn(struct SessionHandle *data, if(result != CURLE_OK) return result; + + /************************************************************* + * If the protocol can't handle url query strings, then cut + * of the unhandable part + *************************************************************/ + if((conn->given->flags&PROTOPT_NOURLQUERY)) { + char *path_q_sep = strchr(conn->data->state.path, '?'); + if(path_q_sep) { + /* according to rfc3986, allow the query (?foo=bar) + also on protocols that can't handle it. + + cut the string-part after '?' + */ + + /* terminate the string */ + path_q_sep[0] = 0; + } + } + #ifndef CURL_DISABLE_PROXY /************************************************************* * Extract the user and password from the authentication string |