mirror of
https://github.com/curl/curl.git
synced 2026-08-03 07:50:28 +03:00
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
3 changed files with 33 additions and 11 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue