mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
clean up and return better on out of memory
This commit is contained in:
parent
c123676825
commit
aa3ae01878
49
lib/url.c
49
lib/url.c
@ -627,11 +627,17 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
|
|||||||
* Set cookie file to read and parse. Can be used multiple times.
|
* Set cookie file to read and parse. Can be used multiple times.
|
||||||
*/
|
*/
|
||||||
cookiefile = (char *)va_arg(param, void *);
|
cookiefile = (char *)va_arg(param, void *);
|
||||||
if(cookiefile)
|
if(cookiefile) {
|
||||||
|
struct curl_slist *cl;
|
||||||
/* append the cookie file name to the list of file names, and deal with
|
/* append the cookie file name to the list of file names, and deal with
|
||||||
them later */
|
them later */
|
||||||
data->change.cookielist =
|
cl = curl_slist_append(data->change.cookielist, cookiefile);
|
||||||
curl_slist_append(data->change.cookielist, cookiefile);
|
|
||||||
|
if(!cl)
|
||||||
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
data->change.cookielist = cl;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CURLOPT_COOKIEJAR:
|
case CURLOPT_COOKIEJAR:
|
||||||
@ -2420,27 +2426,40 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
"%" MAX_CURL_USER_LENGTH_TXT"[^:]:"
|
"%" MAX_CURL_USER_LENGTH_TXT"[^:]:"
|
||||||
"%" MAX_CURL_PASSWORD_LENGTH_TXT "[^@]",
|
"%" MAX_CURL_PASSWORD_LENGTH_TXT "[^@]",
|
||||||
proxyuser, proxypasswd))) {
|
proxyuser, proxypasswd))) {
|
||||||
|
CURLcode res = CURLE_OK;
|
||||||
|
|
||||||
/* found user and password, rip them out */
|
/* found user and password, rip them out */
|
||||||
Curl_safefree(conn->proxyuser);
|
Curl_safefree(conn->proxyuser);
|
||||||
conn->proxyuser = strdup(proxyuser);
|
conn->proxyuser = strdup(proxyuser);
|
||||||
|
|
||||||
if(!conn->proxyuser)
|
if(!conn->proxyuser)
|
||||||
return CURLE_OUT_OF_MEMORY;
|
res = CURLE_OUT_OF_MEMORY;
|
||||||
|
else {
|
||||||
Curl_safefree(conn->proxypasswd);
|
Curl_safefree(conn->proxypasswd);
|
||||||
conn->proxypasswd = strdup(proxypasswd);
|
conn->proxypasswd = strdup(proxypasswd);
|
||||||
|
|
||||||
if(!conn->proxypasswd)
|
if(!conn->proxypasswd)
|
||||||
return CURLE_OUT_OF_MEMORY;
|
res = CURLE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
conn->bits.proxy_user_passwd = TRUE; /* enable it */
|
|
||||||
|
|
||||||
ptr = strdup(ptr+1); /* the right side of the @-letter */
|
if(CURLE_OK == res) {
|
||||||
free(proxy); /* free the former data */
|
conn->bits.proxy_user_passwd = TRUE; /* enable it */
|
||||||
proxy = ptr; /* now use this instead */
|
ptr = strdup(ptr+1); /* the right side of the @-letter */
|
||||||
|
|
||||||
|
if(ptr) {
|
||||||
|
free(proxy); /* free the former proxy string */
|
||||||
|
proxy = ptr; /* now use this instead */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
res = CURLE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(res) {
|
||||||
|
free(proxy); /* free the allocated proxy string */
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data->change.proxy = proxy;
|
data->change.proxy = proxy;
|
||||||
data->change.proxy_alloc=TRUE; /* this needs to be freed later */
|
data->change.proxy_alloc=TRUE; /* this needs to be freed later */
|
||||||
conn->bits.httpproxy = TRUE;
|
conn->bits.httpproxy = TRUE;
|
||||||
|
Loading…
Reference in New Issue
Block a user