summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2023-06-13 23:51:06 -0500
committerDanny Holman <dholman@gymli.org>2023-06-13 23:51:06 -0500
commit2c92cde5537221389783ad30b96dbb7df9fb52d6 (patch)
tree80c90f481e66133c654ff6745e9ff2164fbc8379 /server
parent75bd5299b88de67754572e21c408c247db5d3c9b (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>
Diffstat (limited to 'server')
-rw-r--r--server/src/util.c15
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;
}