diff options
author | Danny Holman <dholman@gymli.org> | 2023-06-13 23:51:06 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2023-06-13 23:51:06 -0500 |
commit | 2c92cde5537221389783ad30b96dbb7df9fb52d6 (patch) | |
tree | 80c90f481e66133c654ff6745e9ff2164fbc8379 | |
parent | 75bd5299b88de67754572e21c408c247db5d3c9b (diff) |
server: util: fix a memory leak in str_split
Fix a memory access violation in str_split() that would cause the C&C
server to crash unexpectedly.
Signed-off-by: Danny Holman <dholman@gymli.org>
-rw-r--r-- | server/src/util.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/server/src/util.c b/server/src/util.c index 068da0a..f9053f5 100644 --- a/server/src/util.c +++ b/server/src/util.c @@ -58,16 +58,19 @@ char* str_strip(char *str) { } char** str_split(char *str, const char *delim) { - char *saveptr; - char *token = strtok_r(str, delim, &saveptr); - token = str_strip(token); + size_t count = 0; char **ret = NULL; - int count = -1; + char *token; + char *saveptr; + token = strtok_r(str, delim, &saveptr); while (token != NULL) { count++; - ret = realloc(ret, sizeof(char*) * (count+1)); - ret[count] = token; + ret = realloc(ret, sizeof(char*) * count); + ret[count-1] = strdup(str_strip(token)); token = strtok_r(NULL, delim, &saveptr); } + count++; + ret = realloc(ret, sizeof(char*) * count); + ret[count-1] = NULL; return ret; } |