[pacman-dev] [PATCH] pacman: fix segfault when Usage is specified without a value
And extract all the common code to a macro. Signed-off-by: morganamilo <morganamilo@gmail.com> --- src/pacman/conf.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/pacman/conf.c b/src/pacman/conf.c index 29f69052..cca3657e 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -844,28 +844,28 @@ static int _parse_repo(const char *key, char *value, const char *file, int ret = 0; config_repo_t *repo = section->repo; +#define CHECK_VALUE(val) do { \ + if(!val) { \ + pm_printf(ALPM_LOG_ERROR, _("config file %s, line %d: directive '%s' needs a value\n"), \ + file, line, key); \ + return 1; \ + } \ +} while(0) + if(strcmp(key, "Server") == 0) { - if(!value) { - pm_printf(ALPM_LOG_ERROR, _("config file %s, line %d: directive '%s' needs a value\n"), - file, line, key); - ret = 1; - } else { - repo->servers = alpm_list_add(repo->servers, strdup(value)); - } + CHECK_VALUE(value); + repo->servers = alpm_list_add(repo->servers, strdup(value)); } else if(strcmp(key, "SigLevel") == 0) { - if(!value) { - pm_printf(ALPM_LOG_ERROR, _("config file %s, line %d: directive '%s' needs a value\n"), - file, line, key); - } else { - alpm_list_t *values = NULL; - setrepeatingoption(value, "SigLevel", &values); - if(values) { - ret = process_siglevel(values, &repo->siglevel, - &repo->siglevel_mask, file, line); - FREELIST(values); - } + CHECK_VALUE(value); + alpm_list_t *values = NULL; + setrepeatingoption(value, "SigLevel", &values); + if(values) { + ret = process_siglevel(values, &repo->siglevel, + &repo->siglevel_mask, file, line); + FREELIST(values); } } else if(strcmp(key, "Usage") == 0) { + CHECK_VALUE(value); alpm_list_t *values = NULL; setrepeatingoption(value, "Usage", &values); if(values) { @@ -881,6 +881,8 @@ static int _parse_repo(const char *key, char *value, const char *file, file, line, key, repo->name); } +#undef CHECK_VALUE + return ret; } -- 2.21.0
On 7/3/19 8:52 am, morganamilo wrote:
And extract all the common code to a macro.
Signed-off-by: morganamilo <morganamilo@gmail.com> ---
How can I replicate? I set "Usage =" in my pacman.conf and no segfault from either pacman or pacman-conf Allan
On 7/3/19 10:53 am, Allan McRae wrote:
On 7/3/19 8:52 am, morganamilo wrote:
And extract all the common code to a macro.
Signed-off-by: morganamilo <morganamilo@gmail.com> ---
How can I replicate?
I set "Usage =" in my pacman.conf and no segfault from either pacman or pacman-conf
Got it... Just use "Usage" with no equals sign. A
participants (2)
-
Allan McRae
-
morganamilo