curl: Replace spaces in URIs with %20

cURL requires the URIs to be URL-encoded. Apparently, some CAs encode CRL
URIs with spaces in them.

Fixes #454.
This commit is contained in:
Tobias Brunner 2013-11-22 10:42:18 +01:00
parent ccb6758e5b
commit 72a92d4f7d
1 changed files with 14 additions and 3 deletions

View File

@ -80,7 +80,7 @@ static size_t curl_cb(void *ptr, size_t size, size_t nmemb, cb_data_t *data)
METHOD(fetcher_t, fetch, status_t,
private_curl_fetcher_t *this, char *uri, void *userdata)
{
char error[CURL_ERROR_SIZE];
char error[CURL_ERROR_SIZE], *enc_uri;
status_t status;
cb_data_t data = {
.cb = this->cb,
@ -92,9 +92,14 @@ METHOD(fetcher_t, fetch, status_t,
*(chunk_t*)userdata = chunk_empty;
}
if (curl_easy_setopt(this->curl, CURLOPT_URL, uri) != CURLE_OK)
/* the URI has to be URL-encoded, we only replace spaces as replacing other
* characters (e.g. '/' or ':') would render the URI invalid */
enc_uri = strreplace(uri, " ", "%20");
if (curl_easy_setopt(this->curl, CURLOPT_URL, enc_uri) != CURLE_OK)
{ /* URL type not supported by curl */
return NOT_SUPPORTED;
status = NOT_SUPPORTED;
goto out;
}
curl_easy_setopt(this->curl, CURLOPT_ERRORBUFFER, error);
curl_easy_setopt(this->curl, CURLOPT_FAILONERROR, TRUE);
@ -125,6 +130,12 @@ METHOD(fetcher_t, fetch, status_t,
status = FAILED;
break;
}
out:
if (enc_uri != uri)
{
free(enc_uri);
}
return status;
}