1
0
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:
Daniel Stenberg 2004-05-12 13:05:01 +00:00
parent c123676825
commit aa3ae01878

View File

@ -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;