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; | 
