From b1bdc2d4c11dd7e839975a44e98f7317e58a4b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 7 Oct 2020 18:34:48 +0200 Subject: [PATCH] config: ignore key/value pairs following an invalid section name When we detected an invalid section name, we correctly logged this and warned the user. However, the internal state machine now had an invalid section enum value. This caused a crash when the next key/value pair was to be parsed and we tried to lookup which parser function to call. Closes #159. --- CHANGELOG.md | 2 ++ config.c | 7 +++++++ 2 files changed, 9 insertions(+) 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);