diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b247ec9..3e907f68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,8 @@ that it is (much) slower compared to previous foot versions. Use the **scrollback.multiplier** option in `foot.ini` if you find the new speed too slow (https://codeberg.org/dnkl/foot/issues/144). +* Crash when `foot.ini` contains an invalid section name + (https://codeberg.org/dnkl/foot/issues/159). ### Security diff --git a/config.c b/config.c index c69af59d..ff5d6c59 100644 --- a/config.c +++ b/config.c @@ -1673,6 +1673,11 @@ parse_config_file(FILE *f, struct config *conf, const char *path, bool errors_ar continue; } + if (section >= SECTION_COUNT) { + /* Last section name was invalid; ignore all keys in it */ + continue; + } + char *key = strtok(key_value, "="); if (key == NULL) { LOG_AND_NOTIFY_ERR("%s:%d: syntax error: no key specified", path, lineno); @@ -1711,6 +1716,8 @@ parse_config_file(FILE *f, struct config *conf, const char *path, bool errors_ar LOG_DBG("section=%s, key='%s', value='%s', comment='%s'", section_info[section].name, key, value, comment); + assert(section >= 0 && section < SECTION_COUNT); + parser_fun_t section_parser = section_info[section].fun; assert(section_parser != NULL);