mirror of
https://github.com/curl/curl.git
synced 2026-04-14 23:51:42 +03:00
parent
3058ed3df8
commit
e9786038d6
1 changed files with 44 additions and 36 deletions
80
lib/setopt.c
80
lib/setopt.c
|
|
@ -128,7 +128,8 @@ CURLcode Curl_setblobopt(struct curl_blob **blobp,
|
|||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp)
|
||||
static CURLcode setstropt_userpwd(const char *option, char **userp,
|
||||
char **passwdp)
|
||||
{
|
||||
char *user = NULL;
|
||||
char *passwd = NULL;
|
||||
|
|
@ -1664,7 +1665,7 @@ static CURLcode cookiefile(struct Curl_easy *data, const char *ptr)
|
|||
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
|
||||
char *ptr)
|
||||
const char *ptr)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
struct UserDefined *s = &data->set;
|
||||
|
|
@ -1832,6 +1833,46 @@ static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
|
||||
/*
|
||||
* A string with POST data. Makes curl HTTP POST. Even if it is NULL. If
|
||||
* needed, CURLOPT_POSTFIELDSIZE must have been set prior to
|
||||
* CURLOPT_COPYPOSTFIELDS and not altered later.
|
||||
*/
|
||||
static CURLcode setopt_copypostfields(const char *ptr, struct UserDefined *s)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
if(!ptr || s->postfieldsize == -1)
|
||||
result = Curl_setstropt(&s->str[STRING_COPYPOSTFIELDS], ptr);
|
||||
else {
|
||||
size_t pflen;
|
||||
|
||||
if(s->postfieldsize < 0)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
pflen = curlx_sotouz_range(s->postfieldsize, 0, SIZE_MAX);
|
||||
if(pflen == SIZE_MAX)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
else {
|
||||
/* Allocate even when size == 0. This satisfies the need of possible
|
||||
later address compare to detect the COPYPOSTFIELDS mode, and to mark
|
||||
that postfields is used rather than read function or form data.
|
||||
*/
|
||||
char *p = curlx_memdup0(ptr, pflen);
|
||||
if(!p)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
else {
|
||||
curlx_free(s->str[STRING_COPYPOSTFIELDS]);
|
||||
s->str[STRING_COPYPOSTFIELDS] = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->postfields = s->str[STRING_COPYPOSTFIELDS];
|
||||
s->method = HTTPREQ_POST;
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
|
||||
char *ptr)
|
||||
{
|
||||
|
|
@ -1901,40 +1942,7 @@ static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
|
|||
|
||||
#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
|
||||
case CURLOPT_COPYPOSTFIELDS:
|
||||
/*
|
||||
* A string with POST data. Makes curl HTTP POST. Even if it is NULL.
|
||||
* If needed, CURLOPT_POSTFIELDSIZE must have been set prior to
|
||||
* CURLOPT_COPYPOSTFIELDS and not altered later.
|
||||
*/
|
||||
if(!ptr || s->postfieldsize == -1)
|
||||
result = Curl_setstropt(&s->str[STRING_COPYPOSTFIELDS], ptr);
|
||||
else {
|
||||
size_t pflen;
|
||||
|
||||
if(s->postfieldsize < 0)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
pflen = curlx_sotouz_range(s->postfieldsize, 0, SIZE_MAX);
|
||||
if(pflen == SIZE_MAX)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
else {
|
||||
/* Allocate even when size == 0. This satisfies the need of possible
|
||||
later address compare to detect the COPYPOSTFIELDS mode, and to
|
||||
mark that postfields is used rather than read function or form
|
||||
data.
|
||||
*/
|
||||
char *p = curlx_memdup0(ptr, pflen);
|
||||
if(!p)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
else {
|
||||
curlx_free(s->str[STRING_COPYPOSTFIELDS]);
|
||||
s->str[STRING_COPYPOSTFIELDS] = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->postfields = s->str[STRING_COPYPOSTFIELDS];
|
||||
s->method = HTTPREQ_POST;
|
||||
break;
|
||||
return setopt_copypostfields(ptr, s);
|
||||
|
||||
case CURLOPT_POSTFIELDS:
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue