aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorJonas Schnelli <jonas.schnelli@include7.ch>2011-11-24 23:28:54 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-11-24 23:31:19 +0100
commit2c905fd1f8200349667dc990a17daf37214700bf (patch)
tree2ca084e15c43f9c1ac1eff3a63da41ee62ac089b /lib/url.c
parent4403e82f32de9b339cdacea6989e4a827a7b3a02 (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.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/url.c b/lib/url.c
index 517dc18da..2c5cb39b8 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -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