[pacman-dev] [PATCH] pacman: fix segfault when Usage is specified without a value
morganamilo
morganamilo at gmail.com
Wed Mar 6 22:52:19 UTC 2019
And extract all the common code to a macro.
Signed-off-by: morganamilo <morganamilo at 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
More information about the pacman-dev
mailing list