diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-05-26 16:58:20 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-05-26 18:09:39 -0700 |
commit | 12a4ecfbf413777c3ef98719e6b41993a9618903 (patch) | |
tree | 1ca1da86cf3a882de694ce82b14e50be0a1bed3c | |
parent | eee1721010b37cccde8635796cb2a2553d19889f (diff) |
setup,til: assert(desc) if setup_func() wants more settings
In this "all settings require descs" world, when setup_func
forgets to return a res_desc for a setting it wants, we can end
up in an infinite loop situation. It's better to abort
immediately on the assert to catch such a program error.
-rw-r--r-- | src/setup.c | 2 | ||||
-rw-r--r-- | src/til.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/src/setup.c b/src/setup.c index 30a5401..d2618ad 100644 --- a/src/setup.c +++ b/src/setup.c @@ -22,6 +22,8 @@ int setup_interactively(til_settings_t *settings, int (*setup_func)(const til_se /* TODO: regex and error handling */ while ((r = setup_func(settings, &setting, &desc, res_setup)) > 0) { + assert(desc); + additions++; /* if setup_func() has returned a description for an undescribed preexisting setting, @@ -348,6 +348,8 @@ int til_module_randomize_setup(const til_module_t *module, unsigned seed, til_se return -ENOMEM; for (setting = NULL; module->setup(settings, &setting, &desc, res_setup) > 0; setting = NULL) { + assert(desc); + if (!setting) { if (desc->spec.random) { char *value; |