mirror of https://github.com/moparisthebest/curl
tool_getparam: replace (in-place) '%20' by '+' according to RFC1866
Signed-off-by: Victor Vieux <victorvieux@gmail.com> Closes #6895
This commit is contained in:
parent
7bdec2a08b
commit
0d7c55bd57
|
@ -48,7 +48,6 @@ problems may have been fixed or changed somewhat since this was written!
|
|||
4.1 -J and -O with %-encoded file names
|
||||
4.2 -J with -C - fails
|
||||
4.3 --retry and transfer timeouts
|
||||
4.4 Improve --data-urlencode space encoding
|
||||
|
||||
5. Build and portability issues
|
||||
5.1 OS400 port requires deprecated IBM library
|
||||
|
@ -411,13 +410,6 @@ problems may have been fixed or changed somewhat since this was written!
|
|||
https://curl.se/mail/lib-2008-01/0080.html and Mandriva bug report
|
||||
https://qa.mandriva.com/show_bug.cgi?id=22565
|
||||
|
||||
4.4 Improve --data-urlencode space encoding
|
||||
|
||||
ASCII space characters in --data-urlencode are currently encoded as %20
|
||||
rather than +, which RFC 1866 says should be used.
|
||||
|
||||
See https://github.com/curl/curl/issues/3229
|
||||
|
||||
5. Build and portability issues
|
||||
|
||||
5.1 OS400 port requires deprecated IBM library
|
||||
|
|
|
@ -442,6 +442,34 @@ done:
|
|||
*certname_place = '\0';
|
||||
}
|
||||
|
||||
/* Replace (in-place) '%20' by '+' according to RFC1866 */
|
||||
static size_t replace_url_encoded_space_by_plus(char *url)
|
||||
{
|
||||
size_t orig_len = strlen(url);
|
||||
size_t orig_index = 0;
|
||||
size_t new_index = 0;
|
||||
|
||||
while(orig_index < orig_len) {
|
||||
if((url[orig_index] == '%') &&
|
||||
(url[orig_index + 1] == '2') &&
|
||||
(url[orig_index + 2] == '0')) {
|
||||
url[new_index] = '+';
|
||||
orig_index += 3;
|
||||
}
|
||||
else{
|
||||
if(new_index != orig_index) {
|
||||
url[new_index] = url[orig_index];
|
||||
}
|
||||
orig_index++;
|
||||
}
|
||||
new_index++;
|
||||
}
|
||||
|
||||
url[new_index] = 0; /* terminate string */
|
||||
|
||||
return new_index; /* new size */
|
||||
}
|
||||
|
||||
static void
|
||||
GetFileAndPassword(char *nextarg, char **file, char **password)
|
||||
{
|
||||
|
@ -1422,9 +1450,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
char *enc = curl_easy_escape(NULL, postdata, (int)size);
|
||||
Curl_safefree(postdata); /* no matter if it worked or not */
|
||||
if(enc) {
|
||||
/* replace (in-place) '%20' by '+' acording to RFC1866 */
|
||||
size_t enclen = replace_url_encoded_space_by_plus(enc);
|
||||
/* now make a string with the name from above and append the
|
||||
encoded string */
|
||||
size_t outlen = nlen + strlen(enc) + 2;
|
||||
size_t outlen = nlen + enclen + 2;
|
||||
char *n = malloc(outlen);
|
||||
if(!n) {
|
||||
curl_free(enc);
|
||||
|
|
|
@ -43,10 +43,10 @@ POST /%TESTNUMBER HTTP/1.1
|
|||
Host: %HOSTIP:%HTTPPORT
|
||||
User-Agent: curl/%VERSION
|
||||
Accept: */*
|
||||
Content-Length: 133
|
||||
Content-Length: 119
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
my%20name%20is%20moo%5B%5D&y e s=s_i_r&v_alue=content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A&content%20to%20_%3F%21%23%24%27%7C%3C%3E%0A
|
||||
my+name+is+moo%5B%5D&y e s=s_i_r&v_alue=content+to+_%3F%21%23%24%27%7C%3C%3E%0A&content+to+_%3F%21%23%24%27%7C%3C%3E%0A
|
||||
</protocol>
|
||||
</verify>
|
||||
</testcase>
|
||||
|
|
Loading…
Reference in New Issue