summaryrefslogtreecommitdiff
path: root/src/til_settings.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2022-03-30 14:06:23 -0700
committerVito Caputo <vcaputo@pengaru.com>2022-03-30 14:06:23 -0700
commite8e79b7a2b88262b84bf6006bc7cd5764962fdc9 (patch)
treeae64007c14fb96af0f3a6366b0a84b530ad79d3e /src/til_settings.c
parentf3290897544c4427dc208d1dd1e33836639be8ba (diff)
til_settings: fix empty values in til_settings_new()
Previously if you supplied an empty setting value like so: "--module=compose,layers=" The interactive setup would get itself into an infinite loop because the layers setting is already present, but has a NULL value. This wasn't a NULL value, it was a "" value. The parser should just fallthrough to the value state from the equal state after recording the value's start pointer. This will result in a "" value getting allocated and assigned to the value before the loop breaks out on the '\0' immediately following the '='. There are probably other edge cases which need better handling here.
Diffstat (limited to 'src/til_settings.c')
-rw-r--r--src/til_settings.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/til_settings.c b/src/til_settings.c
index 5d890d4..8aa172b 100644
--- a/src/til_settings.c
+++ b/src/til_settings.c
@@ -96,7 +96,7 @@ til_settings_t * til_settings_new(const char *settings_string)
case TIL_SETTINGS_FSM_STATE_EQUAL:
token = p;
state = TIL_SETTINGS_FSM_STATE_VALUE;
- break;
+ /* fallthrough, necessary to not leave NULL values for empty "key=\0" settings */
case TIL_SETTINGS_FSM_STATE_VALUE:
if (*p == ',' || *p == '\0') {
© All Rights Reserved