diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2014-01-06 11:52:24 -0500 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2014-01-30 14:02:31 +1000 |
commit | fac9ac6c4011ff643b7335c7381f6219b07bba80 (patch) | |
tree | faba525f6d3dcc40237928127b31d3e7c850fae5 | |
parent | 4d68092e2fd8c8a3b6da39e509ad48db0fc9ed7a (diff) | |
download | pacman-fac9ac6c4011ff643b7335c7381f6219b07bba80.tar.xz |
sync_prepare: manually set pm_errno
_alpm_resolvedeps resets pm_errno to 0 by calling alpm_checkdeps.
Whenever the last call succeeded, pm_errno was not properly set,
preventing pacman from properly handling the error and leaking
additional memory. We know pm_errno should be ALPM_ERR_UNSATISFIED_DEPS
if resolvedeps has failed, so just set it manually.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | lib/libalpm/sync.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index f1add246..4a76438e 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -442,7 +442,6 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data) see if they'd like to ignore them rather than failing the sync */ if(unresolvable != NULL) { int remove_unresolvable = 0; - alpm_errno_t saved_err = handle->pm_errno; QUESTION(handle, ALPM_QUESTION_REMOVE_PKGS, unresolvable, NULL, NULL, &remove_unresolvable); if(remove_unresolvable) { @@ -458,7 +457,7 @@ int _alpm_sync_prepare(alpm_handle_t *handle, alpm_list_t **data) } } else { /* pm_errno was set by resolvedeps, callback may have overwrote it */ - handle->pm_errno = saved_err; + handle->pm_errno = ALPM_ERR_UNSATISFIED_DEPS; alpm_list_free(resolved); ret = -1; goto cleanup; |