aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-03-24 19:13:27 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-03-24 19:13:27 -0400
commita932b819cec18ada8f8f6c831c2b9fe1d77fb27f (patch)
tree569dcd871c1ad4b681452de2d97fd5e1d0c82bc6
parent084892a9d3c7e641e31f0c565928104b28a7898c (diff)
downloadstasis-a932b819cec18ada8f8f6c831c2b9fe1d77fb27f.tar.gz
Fix up section->data realloc
* Add error handling
-rw-r--r--src/ini.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/ini.c b/src/ini.c
index e2c2a7c..4e36494 100644
--- a/src/ini.c
+++ b/src/ini.c
@@ -146,16 +146,29 @@ int ini_data_append(struct INIFILE **ini, char *section_name, char *key, char *v
return 1;
}
- struct INIData **tmp = realloc(section->data, (section->data_count + 1) * sizeof(**section->data));
+ struct INIData **tmp = realloc(section->data, (section->data_count + 1) * sizeof(section->data));
if (tmp != section->data) {
section->data = tmp;
} else if (!tmp) {
return 1;
}
if (!ini_data_get((*ini), section_name, key)) {
- section->data[section->data_count] = calloc(1, sizeof(*section->data[0]));
- section->data[section->data_count]->key = key ? strdup(key) : strdup("");
- section->data[section->data_count]->value = strdup(value);
+ struct INIData **data = section->data;
+ data[section->data_count] = calloc(1, sizeof(*data[0]));
+ if (!data[section->data_count]) {
+ SYSERROR("Unable to allocate %zu bytes for section data", sizeof(*data[0]));
+ return -1;
+ }
+ data[section->data_count]->key = key ? strdup(key) : strdup("");
+ if (!data[section->data_count]->key) {
+ SYSERROR("Unable to allocate data key%s", "");
+ return -1;
+ }
+ data[section->data_count]->value = strdup(value);
+ if (!data[section->data_count]->value) {
+ SYSERROR("Unable to allocate data value%s", "");
+ return -1;
+ }
section->data_count++;
} else {
struct INIData *data = ini_data_get(*ini, section_name, key);