tool_setopt: return error on OOM correctly

When generating mime code for the --libcurl option.

Follow-up to acdb48272a

Spotted by Codex Security

Closes #21083
This commit is contained in:
Daniel Stenberg 2026-03-24 09:35:39 +01:00
parent 54f4937729
commit 18f88739ff
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -407,6 +407,7 @@ static CURLcode libcurl_generate_mime_part(CURL *curl,
int submimeno = 0;
const char *data = NULL;
const char *filename = part->filename;
char *escaped;
/* Parts are linked in reverse order. */
if(part->prev)
@ -435,7 +436,9 @@ static CURLcode libcurl_generate_mime_part(CURL *curl,
case TOOLMIME_DATA:
data = part->data;
if(!result) {
char *escaped = c_escape(data, ZERO_TERMINATED);
escaped = c_escape(data, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result =
easysrc_addf(&easysrc_code,
"curl_mime_data(part%d, \"%s\", CURL_ZERO_TERMINATED);",
@ -445,8 +448,10 @@ static CURLcode libcurl_generate_mime_part(CURL *curl,
break;
case TOOLMIME_FILE:
case TOOLMIME_FILEDATA: {
char *escaped = c_escape(part->data, ZERO_TERMINATED);
case TOOLMIME_FILEDATA:
escaped = c_escape(part->data, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result =
easysrc_addf(&easysrc_code,
"curl_mime_filedata(part%d, \"%s\");", mimeno, escaped);
@ -456,7 +461,6 @@ static CURLcode libcurl_generate_mime_part(CURL *curl,
}
curlx_free(escaped);
break;
}
case TOOLMIME_STDIN:
if(!filename)
@ -476,28 +480,36 @@ static CURLcode libcurl_generate_mime_part(CURL *curl,
}
if(!result && part->encoder) {
char *escaped = c_escape(part->encoder, ZERO_TERMINATED);
escaped = c_escape(part->encoder, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result = easysrc_addf(&easysrc_code, "curl_mime_encoder(part%d, \"%s\");",
mimeno, escaped);
curlx_free(escaped);
}
if(!result && filename) {
char *escaped = c_escape(filename, ZERO_TERMINATED);
escaped = c_escape(filename, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result = easysrc_addf(&easysrc_code, "curl_mime_filename(part%d, \"%s\");",
mimeno, escaped);
curlx_free(escaped);
}
if(!result && part->name) {
char *escaped = c_escape(part->name, ZERO_TERMINATED);
escaped = c_escape(part->name, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result = easysrc_addf(&easysrc_code, "curl_mime_name(part%d, \"%s\");",
mimeno, escaped);
curlx_free(escaped);
}
if(!result && part->type) {
char *escaped = c_escape(part->type, ZERO_TERMINATED);
escaped = c_escape(part->type, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
result = easysrc_addf(&easysrc_code, "curl_mime_type(part%d, \"%s\");",
mimeno, escaped);
curlx_free(escaped);