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:
parent
ccb6758e5b
commit
72a92d4f7d
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue