From 4f2b2b5b946c211f97b4bbfa5a273c9c7327d203 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Wed, 13 Sep 2023 11:21:51 -0500 Subject: common: fix a segfault in str_split Fix a bug in which str_split would segfault when the string is misformatted. Signed-off-by: Danny Holman --- common/include/util.h | 2 +- common/src/util.c | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/common/include/util.h b/common/include/util.h index 39c130b..66221b2 100644 --- a/common/include/util.h +++ b/common/include/util.h @@ -8,6 +8,6 @@ (type*)((char*)__mptr - offsetof(type, member)); }) char* str_strip(char *str); -char** str_split(char *str, const char *delim); +size_t str_split(char*** arr, char *str, const char *delim); #endif diff --git a/common/src/util.c b/common/src/util.c index 63eefa2..3ff4b57 100644 --- a/common/src/util.c +++ b/common/src/util.c @@ -65,20 +65,19 @@ char* str_strip(char *str) { return str; } -char** str_split(char *str, const char *delim) { +size_t str_split(char*** arr, char *str, const char *delim) { size_t count = 0; - char **ret = NULL; - char *token; char *saveptr; - token = strtok_r(str, delim, &saveptr); + char *token = strtok_r(str, delim, &saveptr); + while (token != NULL) { count++; - ret = realloc(ret, sizeof(char*) * count); - ret[count-1] = strdup(str_strip(token)); + *arr = realloc(*arr, sizeof(char*) * count); + (*arr)[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; + *arr = realloc(*arr, sizeof(char*) * count); + (*arr)[count-1] = NULL; + return count; } -- cgit v1.2.3