Loading CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,10 @@ Changelog Claes Jakobsson (6 Jan 2010) - Julien Chaffraix fixed so that the fragment part in an URL is not sent to the server anymore. Kamil Dudka (3 Jan 2010) - Julien Chaffraix eliminated a duplicated initialization in singlesocket(). Loading RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ This release includes the following bugfixes: o some *_proxy environment variables didn't function o libcurl-OpenSSL engine cleanup o header include fix for FreeBSD versions before v8 o fragment part of URLs are no longer sent to the server This release includes the following known bugs: Loading docs/libcurl/curl_easy_setopt.3 +3 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,9 @@ on which protocols are supported. The string given to CURLOPT_URL must be url-encoded and follow RFC 2396 (http://curl.haxx.se/rfc/rfc2396.txt). Please note that starting with version 7.20.0, the fragment part of the URI will not be send as part of the path, which was the case previously. \fICURLOPT_URL\fP is the only option that \fBmust\fP be set before \fIcurl_easy_perform(3)\fP is called. Loading lib/url.c +17 −9 Original line number Diff line number Diff line Loading @@ -3311,8 +3311,9 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, bool *prot_missing) { char *at; char *tmp; char *fragment; char *path = data->state.path; char *query; int rc; char protobuf[16]; const char *protop; Loading Loading @@ -3438,11 +3439,11 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, */ at = strchr(conn->host.name, '@'); if(at) tmp = strchr(at+1, '?'); query = strchr(at+1, '?'); else tmp = strchr(conn->host.name, '?'); query = strchr(conn->host.name, '?'); if(tmp) { if(query) { /* We must insert a slash before the '?'-letter in the URL. If the URL had a slash after the '?', that is where the path currently begins and the '?string' is still part of the host name. Loading @@ -3451,7 +3452,7 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, the path. And have it all prefixed with a slash. */ size_t hostlen = strlen(tmp); size_t hostlen = strlen(query); size_t pathlen = strlen(path); /* move the existing path plus the zero byte forward, to make room for Loading @@ -3459,11 +3460,11 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, memmove(path+hostlen+1, path, pathlen+1); /* now copy the trailing host part in front of the existing path */ memcpy(path+1, tmp, hostlen); memcpy(path+1, query, hostlen); path[0]='/'; /* prepend the missing slash */ *tmp=0; /* now cut off the hostname at the ? */ *query=0; /* now cut off the hostname at the ? */ } else if(!path[0]) { /* if there's no path set, use a single slash */ Loading Loading @@ -3504,8 +3505,15 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, /* Override any scope that was set above. */ conn->scope = data->set.scope; /* Remove the fragment part of the path. Per RFC 2396, this is always the last part of the URI. We are looking for the first '#' so that we deal gracefully with non conformant URI such as http://example.com#foo#bar. */ fragment = strchr(path, '#'); if(fragment) *fragment = 0; /* * So if the URL was A://B/C, * So if the URL was A://B/C#D, * protop is A * conn->host.name is B * data->state.path is /C Loading tests/data/test1109 0 → 100644 +46 −0 Original line number Diff line number Diff line <testcase> # Test that the fragment is not send as part of the path. <info> <keywords> HTTP CURLOPT_URL </keywords> </info> # Server-side <reply name="1"> <data> HTTP/1.1 200 OK Content-Length: 6 hello </data> </reply> # Client-side <client> <server> http </server> <name> HTTP GET </name> <command> http://%HOSTIP:%HTTPPORT/1109#test </command> </client> # Verify data after the test has been "shot" <verify> <strip> ^User-Agent:.* </strip> <protocol> GET /1109 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* </protocol> </verify> </testcase> Loading
CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,10 @@ Changelog Claes Jakobsson (6 Jan 2010) - Julien Chaffraix fixed so that the fragment part in an URL is not sent to the server anymore. Kamil Dudka (3 Jan 2010) - Julien Chaffraix eliminated a duplicated initialization in singlesocket(). Loading
RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ This release includes the following bugfixes: o some *_proxy environment variables didn't function o libcurl-OpenSSL engine cleanup o header include fix for FreeBSD versions before v8 o fragment part of URLs are no longer sent to the server This release includes the following known bugs: Loading
docs/libcurl/curl_easy_setopt.3 +3 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,9 @@ on which protocols are supported. The string given to CURLOPT_URL must be url-encoded and follow RFC 2396 (http://curl.haxx.se/rfc/rfc2396.txt). Please note that starting with version 7.20.0, the fragment part of the URI will not be send as part of the path, which was the case previously. \fICURLOPT_URL\fP is the only option that \fBmust\fP be set before \fIcurl_easy_perform(3)\fP is called. Loading
lib/url.c +17 −9 Original line number Diff line number Diff line Loading @@ -3311,8 +3311,9 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, bool *prot_missing) { char *at; char *tmp; char *fragment; char *path = data->state.path; char *query; int rc; char protobuf[16]; const char *protop; Loading Loading @@ -3438,11 +3439,11 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, */ at = strchr(conn->host.name, '@'); if(at) tmp = strchr(at+1, '?'); query = strchr(at+1, '?'); else tmp = strchr(conn->host.name, '?'); query = strchr(conn->host.name, '?'); if(tmp) { if(query) { /* We must insert a slash before the '?'-letter in the URL. If the URL had a slash after the '?', that is where the path currently begins and the '?string' is still part of the host name. Loading @@ -3451,7 +3452,7 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, the path. And have it all prefixed with a slash. */ size_t hostlen = strlen(tmp); size_t hostlen = strlen(query); size_t pathlen = strlen(path); /* move the existing path plus the zero byte forward, to make room for Loading @@ -3459,11 +3460,11 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, memmove(path+hostlen+1, path, pathlen+1); /* now copy the trailing host part in front of the existing path */ memcpy(path+1, tmp, hostlen); memcpy(path+1, query, hostlen); path[0]='/'; /* prepend the missing slash */ *tmp=0; /* now cut off the hostname at the ? */ *query=0; /* now cut off the hostname at the ? */ } else if(!path[0]) { /* if there's no path set, use a single slash */ Loading Loading @@ -3504,8 +3505,15 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data, /* Override any scope that was set above. */ conn->scope = data->set.scope; /* Remove the fragment part of the path. Per RFC 2396, this is always the last part of the URI. We are looking for the first '#' so that we deal gracefully with non conformant URI such as http://example.com#foo#bar. */ fragment = strchr(path, '#'); if(fragment) *fragment = 0; /* * So if the URL was A://B/C, * So if the URL was A://B/C#D, * protop is A * conn->host.name is B * data->state.path is /C Loading
tests/data/test1109 0 → 100644 +46 −0 Original line number Diff line number Diff line <testcase> # Test that the fragment is not send as part of the path. <info> <keywords> HTTP CURLOPT_URL </keywords> </info> # Server-side <reply name="1"> <data> HTTP/1.1 200 OK Content-Length: 6 hello </data> </reply> # Client-side <client> <server> http </server> <name> HTTP GET </name> <command> http://%HOSTIP:%HTTPPORT/1109#test </command> </client> # Verify data after the test has been "shot" <verify> <strip> ^User-Agent:.* </strip> <protocol> GET /1109 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* </protocol> </verify> </testcase>