From 48f4efd9a18966509bd599684e77d3ad49d5b082 Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Thu, 16 Jul 2015 19:05:33 -0400 Subject: [PATCH] copy assumeinstalled options All other option setters copy their input. Signed-off-by: Andrew Gregory Signed-off-by: Allan McRae --- lib/libalpm/handle.c | 11 +++++++++-- src/pacman/conf.c | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index a6a5861f..f336bf2b 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -591,11 +591,13 @@ int SYMEXPORT alpm_option_remove_ignoregroup(alpm_handle_t *handle, const char * int SYMEXPORT alpm_option_add_assumeinstalled(alpm_handle_t *handle, const alpm_depend_t *dep) { + alpm_depend_t *depcpy; CHECK_HANDLE(handle, return -1); ASSERT(dep->mod == ALPM_DEP_MOD_EQ || dep->mod == ALPM_DEP_MOD_ANY, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1)); + ASSERT((depcpy = _alpm_dep_dup(dep)), RET_ERR(handle, ALPM_ERR_MEMORY, -1)); - handle->assumeinstalled = alpm_list_add(handle->assumeinstalled, (void *)dep); + handle->assumeinstalled = alpm_list_add(handle->assumeinstalled, depcpy); return 0; } @@ -606,7 +608,12 @@ int SYMEXPORT alpm_option_set_assumeinstalled(alpm_handle_t *handle, alpm_list_t alpm_list_free_inner(handle->assumeinstalled, (alpm_list_fn_free)alpm_dep_free); alpm_list_free(handle->assumeinstalled); } - handle->assumeinstalled = deps; + while(deps) { + if(alpm_option_add_assumeinstalled(handle, deps->data) != 0) { + return -1; + } + deps = deps->next; + } return 0; } diff --git a/src/pacman/conf.c b/src/pacman/conf.c index e1997435..738b0261 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -801,9 +801,9 @@ static int setup_libalpm(void) pm_printf(ALPM_LOG_DEBUG, "parsed assume installed: %s %s\n", dep->name, dep->version); ret = alpm_option_add_assumeinstalled(handle, dep); + alpm_dep_free(dep); if(ret) { pm_printf(ALPM_LOG_ERROR, _("Failed to pass %s entry to libalpm"), "assume-installed"); - alpm_dep_free(dep); return ret; } }