tool_operate: fix a case of ignoring return code in operate()

If get_args() returns error, do not overwrite the variable in the next
call.

Also, avoid allocating memory for the default user-agent.

Closes #19650
This commit is contained in:
Daniel Stenberg 2025-11-22 19:09:42 +01:00
parent 4ebef2f0d9
commit 36b9987acb
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
3 changed files with 14 additions and 27 deletions

View file

@ -37,6 +37,7 @@
#include "tool_cb_see.h"
#include "tool_cb_dbg.h"
#include "tool_helpers.h"
#include "tool_version.h"
#define BUFFER_SIZE 102400L
@ -874,7 +875,8 @@ CURLcode config2setopts(struct OperationConfig *config,
if(proto_http || proto_rtsp) {
MY_SETOPT_STR(curl, CURLOPT_REFERER, config->referer);
MY_SETOPT_STR(curl, CURLOPT_USERAGENT, config->useragent);
MY_SETOPT_STR(curl, CURLOPT_USERAGENT, config->useragent ?
config->useragent : CURL_NAME "/" CURL_VERSION);
}
if(use_proto == proto_http || use_proto == proto_https) {

View file

@ -2321,17 +2321,19 @@ CURLcode operate(int argc, argv_item_t argv[])
operation = operation->next;
} while(!result && operation);
/* Set the current operation pointer */
global->current = global->first;
if(!result) {
/* Set the current operation pointer */
global->current = global->first;
/* now run! */
result = run_all_transfers(share, result);
/* now run! */
result = run_all_transfers(share, result);
if(global->ssl_sessions && feature_ssls_export) {
CURLcode r2 = tool_ssls_save(global->first, share,
global->ssl_sessions);
if(r2 && !result)
result = r2;
if(global->ssl_sessions && feature_ssls_export) {
CURLcode r2 = tool_ssls_save(global->first, share,
global->ssl_sessions);
if(r2 && !result)
result = r2;
}
}
}

View file

@ -650,14 +650,6 @@ long delegation(const char *str)
return CURLGSSAPI_DELEGATION_NONE;
}
/*
* my_useragent: returns allocated string with default user agent
*/
static char *my_useragent(void)
{
return strdup(CURL_NAME "/" CURL_VERSION);
}
#define isheadersep(x) ((((x)==':') || ((x)==';')))
/*
@ -705,15 +697,6 @@ CURLcode get_args(struct OperationConfig *config, const size_t i)
if(!result && config->proxyuserpwd)
result = checkpasswd("proxy", i, last, &config->proxyuserpwd);
/* Check if we have a user agent */
if(!result && !config->useragent) {
config->useragent = my_useragent();
if(!config->useragent) {
errorf("out of memory");
result = CURLE_OUT_OF_MEMORY;
}
}
return result;
}