diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-24 19:13:27 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-24 19:13:27 -0400 |
commit | a932b819cec18ada8f8f6c831c2b9fe1d77fb27f (patch) | |
tree | 569dcd871c1ad4b681452de2d97fd5e1d0c82bc6 | |
parent | 084892a9d3c7e641e31f0c565928104b28a7898c (diff) | |
download | stasis-a932b819cec18ada8f8f6c831c2b9fe1d77fb27f.tar.gz |
Fix up section->data realloc
* Add error handling
-rw-r--r-- | src/ini.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -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); |