From e4e8f1226f13a04c90b6a8bc8d45b7fc004e3d93 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 4 Mar 2025 15:32:19 +0100 Subject: [PATCH] tool_getparam: do parse_upload_flags without the alloc/free Follow-up to 6758aa722ddf5a6 Closes #16552 --- src/tool_getparam.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/tool_getparam.c b/src/tool_getparam.c index e5837a1fff..a01a62d4da 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -1639,29 +1639,28 @@ static const struct flagmap flag_table[] = { }; static ParameterError parse_upload_flags(struct OperationConfig *config, - char *nextarg) + const char *flag) { - char *flag; ParameterError err = PARAM_OK; - char *tmp = strdup(nextarg); - - if(!tmp) - return PARAM_NO_MEM; - flag = tmp; while(flag) { bool negate; const struct flagmap *map; + size_t len; char *next = strchr(flag, ','); /* Find next comma or end */ if(next) - *next++ = '\0'; + len = next - flag; + else + len = strlen(flag); negate = (*flag == '-'); - if(negate) + if(negate) { flag++; + len--; + } for(map = flag_table; map->name; map++) { - if(!strncmp(flag, map->name, map->len) && flag[map->len] == '\0') { + if((len == map->len) && !strncmp(flag, map->name, map->len)) { if(negate) config->upload_flags &= (unsigned char)~map->flag; else @@ -1675,10 +1674,12 @@ static ParameterError parse_upload_flags(struct OperationConfig *config, break; } + if(next) + /* move over the comma */ + next++; flag = next; } - free(tmp); return err; } -- 2.47.3