From c8d13dac5763735cd220aab330e14c42b2cae3dc Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 26 Nov 2008 14:35:21 +0100 Subject: [PATCH] Fixed bug in the handling of context during result execution, which resulted in broken redirect action. --- src/lib-sieve/sieve-result.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c index db59ec8ec..ef5753822 100644 --- a/src/lib-sieve/sieve-result.c +++ b/src/lib-sieve/sieve-result.c @@ -641,7 +641,10 @@ int sieve_result_execute rac->success = act->start(act, &result->action_env, rac->context, &rac->tr_context); success = success && rac->success; - } + } else { + rac->tr_context = rac->context; + } + rac = rac->next; } @@ -655,8 +658,6 @@ int sieve_result_execute const struct sieve_action *act = rac->action; struct sieve_result_side_effect *rsef; const struct sieve_side_effect *sef; - void *context = rac->tr_context == NULL ? - rac->context : rac->tr_context; /* Execute pre-execute event of side effects */ rsef = rac->seffects != NULL ? rac->seffects->first_effect : NULL; @@ -664,7 +665,7 @@ int sieve_result_execute sef = rsef->seffect; if ( sef->pre_execute != NULL ) success = success & sef->pre_execute - (sef, act, &result->action_env, &rsef->context, context); + (sef, act, &result->action_env, &rsef->context, rac->tr_context); rsef = rsef->next; } @@ -680,7 +681,7 @@ int sieve_result_execute sef = rsef->seffect; if ( sef->post_execute != NULL ) success = success && sef->post_execute - (sef, act, &result->action_env, rsef->context, context); + (sef, act, &result->action_env, rsef->context, rac->tr_context); rsef = rsef->next; } @@ -697,8 +698,6 @@ int sieve_result_execute const struct sieve_action *act = rac->action; struct sieve_result_side_effect *rsef; const struct sieve_side_effect *sef; - void *context = rac->tr_context == NULL ? - rac->context : rac->tr_context; if ( success ) { bool keep = TRUE; @@ -713,7 +712,7 @@ int sieve_result_execute sef = rsef->seffect; if ( sef->post_commit != NULL ) sef->post_commit - (sef, act, &result->action_env, rsef->context, context, + (sef, act, &result->action_env, rsef->context, rac->tr_context, &keep); rsef = rsef->next; } @@ -729,7 +728,7 @@ int sieve_result_execute sef = rsef->seffect; if ( sef->rollback != NULL ) sef->rollback - (sef, act, &result->action_env, rsef->context, context, + (sef, act, &result->action_env, rsef->context, rac->tr_context, rac->success); rsef = rsef->next; } -- GitLab