From eadf38960776e36df75d6c3caf3a35b976acc56c Mon Sep 17 00:00:00 2001 From: Olivier Brunel Date: Tue, 15 Dec 2015 09:14:37 +0100 Subject: alpm: Abort ASAP on failure in pre-transaction hooks There is no need to run any/remaining pre-transaction hooks as soon as a failure has occured, which will lead to aborting the transaction. So if an error occured during the first phase (reading directories/parsing files), or as soon as a hook flagged abort_on_fail does fail, we stop processing them and return. (For post-transaction hooks, all hooks are run regardless since there's no aborting.) Signed-off-by: Olivier Brunel Signed-off-by: Allan McRae --- lib/libalpm/hook.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib') diff --git a/lib/libalpm/hook.c b/lib/libalpm/hook.c index fd251fa9..b5ed17d6 100644 --- a/lib/libalpm/hook.c +++ b/lib/libalpm/hook.c @@ -712,6 +712,10 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when) closedir(d); } + if(ret != 0 && when == ALPM_HOOK_PRE_TRANSACTION) { + goto cleanup; + } + hooks = alpm_list_msort(hooks, alpm_list_count(hooks), (alpm_list_fn_cmp)_alpm_hook_cmp); @@ -745,6 +749,10 @@ int _alpm_hook_run(alpm_handle_t *handle, alpm_hook_when_t when) hook_event.type = ALPM_EVENT_HOOK_RUN_DONE; EVENT(handle, &hook_event); + + if(ret != 0 && when == ALPM_HOOK_PRE_TRANSACTION) { + break; + } } alpm_list_free(hooks_triggered); -- cgit v1.2.3-70-g09d2