← Commit list

0c278cd586

Daniel Stenberg
Daniel Stenberg
2025-12-31
SUCCESS Duration: 347s

Subject

tool_paramhlp: remove a malloc+free from proto2num()

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

src/tool_paramhlp.c+8 -7
@@ -396,21 +396,23 @@ static void protoset_clear(const char **protoset, const char *proto)
* data.
*/
-#define MAX_PROTOSTRING (64 * 11) /* Room for 64 10-chars proto names. */
+#define MAX_PROTOS 34
+#define MAX_PROTOSTRING (MAX_PROTOS * 11) /* Room for MAX_PROTOS number of
+ 10-chars proto names. */
ParameterError proto2num(const char * const *val, char **ostr, const char *str)
{
- const char **protoset;
struct dynbuf obuf;
size_t proto;
CURLcode result = CURLE_OK;
+ const char *protoset[MAX_PROTOS + 1];
- curlx_dyn_init(&obuf, MAX_PROTOSTRING);
-
- protoset = curlx_malloc((proto_count + 1) * sizeof(*protoset));
- if(!protoset)
+ DEBUGASSERT(proto_count <= MAX_PROTOS);
+ if(proto_count > MAX_PROTOS) /* if case of surprises */
return PARAM_NO_MEM;
+ curlx_dyn_init(&obuf, MAX_PROTOSTRING);
+
/* Preset protocol set with default values. */
protoset[0] = NULL;
for(; *val; val++) {
@@ -505,7 +507,6 @@ ParameterError proto2num(const char * const *val, char **ostr, const char *str)
for(proto = 0; protoset[proto] && !result; proto++)
result = curlx_dyn_addf(&obuf, "%s%s", curlx_dyn_len(&obuf) ? "," : "",
protoset[proto]);
- curlx_free((char *)protoset);
if(result)
return PARAM_NO_MEM;
if(!curlx_dyn_len(&obuf)) {