diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-27 12:25:19 -0400 |
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-27 12:25:19 -0400 |
| commit | 9a39dd3fb2cace355aab7dd5881e5f11adf3b2f8 (patch) | |
| tree | 053c8e7add530a3b30c5902efeb08326fb834490 /src | |
| parent | 062b0dc23ac67a4e8311d8db998f97a60ad1c506 (diff) | |
| download | stasis-9a39dd3fb2cace355aab7dd5881e5f11adf3b2f8.tar.gz | |
ini_write: Make inikey buffer sizes less impossible to understand
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/core/ini.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/lib/core/ini.c b/src/lib/core/ini.c index a9d8fab..7249ee2 100644 --- a/src/lib/core/ini.c +++ b/src/lib/core/ini.c @@ -478,8 +478,8 @@ int ini_write(struct INIFILE *ini, FILE **stream, unsigned mode) { snprintf(outvalue + strlen(outvalue), len, " %s" LINE_SEP, render); } } else { - SYSDEBUG("string hint. buffer remaining=%zu", len); len = sizeof(outvalue) - (size_t) snprintf(NULL, 0, "%s", render); + SYSDEBUG("string hint. buffer remaining=%zu", len); snprintf(outvalue + strlen(outvalue), len, "%s", render); } if (mode == INI_WRITE_PRESERVE) { @@ -564,15 +564,15 @@ struct INIFILE *ini_open(const char *filename) { unsigned hint = 0; int multiline_data = 0; int no_data = 0; - char inikey[2][255]; + char inikey[2][255] = {0}; char *key = inikey[0]; char *key_last = inikey[1]; char value[STASIS_BUFSIZ] = {0}; - memset(inikey, 0, sizeof(inikey)); - // Read file for (size_t i = 0; fgets(line, sizeof(line), fp) != NULL; i++) { + const size_t key_last_size = sizeof(inikey[1]); + const size_t key_size = sizeof(inikey[0]); if (no_data && multiline_data) { if (!isempty(line)) { no_data = 0; @@ -581,7 +581,7 @@ struct INIFILE *ini_open(const char *filename) { } memset(value, 0, sizeof(value)); } else { - memset(key, 0, sizeof(inikey[0])); + memset(key, 0, key_size); } // Find pointer to first comment character char *comment = strpbrk(line, ";#"); @@ -605,7 +605,7 @@ struct INIFILE *ini_open(const char *filename) { // Test for section header: [string] if (startswith(line, "[")) { // The previous key is irrelevant now - memset(key_last, 0, sizeof(inikey[1])); + memset(key_last, 0, key_last_size); char *section_name = substring_between(line, "[]"); if (!section_name) { @@ -647,15 +647,15 @@ struct INIFILE *ini_open(const char *filename) { if (operator) { size_t key_len = operator - line; - memset(key, 0, sizeof(inikey[0])); + memset(key, 0, key_size); strncpy(key, line, key_len); - key[key_len] = '\0'; + key[key_size - 1] = '\0'; lstrip(key); strip(key); - memset(key_last, 0, sizeof(inikey[1])); - strncpy(key_last, key, sizeof(inikey[1]) - 1); - key_last[sizeof(inikey[1]) - 1] = '\0'; + memset(key_last, 0, key_last_size); + strncpy(key_last, key, key_last_size - 1); + key_last[key_last_size - 1] = '\0'; reading_value = 1; if (strlen(operator) > 1) { @@ -676,8 +676,8 @@ struct INIFILE *ini_open(const char *filename) { } strip(value); } else { - strncpy(key, key_last, sizeof(inikey[0]) - 1); - key[sizeof(inikey[0]) - 1] = '\0'; + strncpy(key, key_last, key_size - 1); + key[key_size - 1] = '\0'; strncpy(value, line, sizeof(value) - 1); value[sizeof(value) - 1] = '\0'; } |
