diff --git a/src/lib-sieve/plugins/enotify/cmd-notify.c b/src/lib-sieve/plugins/enotify/cmd-notify.c index e3dca400b22e236e4f8f4e5a64ecf56a33701e72..13e6c768fe61f515be953216d5e1b19967b70318 100644 --- a/src/lib-sieve/plugins/enotify/cmd-notify.c +++ b/src/lib-sieve/plugins/enotify/cmd-notify.c @@ -604,6 +604,8 @@ static bool act_notify_commit (aenv->ehandler, action->location, "notify action"); result = method->def->action_execute(&nenv, act); + + sieve_error_handler_unref(&nenv.ehandler); } return result; diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c index 1947ecd18a470739f3619af0c819b21ad73b1e5f..8214deb1aa5864a4b6ae376ba94079a06815b231 100644 --- a/src/lib-sieve/sieve-result.c +++ b/src/lib-sieve/sieve-result.c @@ -144,6 +144,9 @@ void sieve_result_unref(struct sieve_result **result) if ( (*result)->ehandler != NULL ) sieve_error_handler_unref(&(*result)->ehandler); + if ( (*result)->action_env.ehandler != NULL ) + sieve_error_handler_unref(&(*result)->action_env.ehandler); + pool_unref(&(*result)->pool); *result = NULL; @@ -854,7 +857,7 @@ static const char *_get_from_address(struct mail *mail) NULL : t_strconcat(addr->mailbox, "@", addr->domain, NULL); } -static void _sieve_result_prepare_environment(struct sieve_result *result) +static void _sieve_result_prepare_execution(struct sieve_result *result) { const struct sieve_message_data *msgdata = result->action_env.msgdata; const struct sieve_script_env *senv = result->action_env.scriptenv; @@ -886,6 +889,10 @@ static void _sieve_result_prepare_environment(struct sieve_result *result) result->action_env.exec_status = ( senv->exec_status == NULL ? t_new(struct sieve_exec_status, 1) : senv->exec_status ); + + if ( result->action_env.ehandler != NULL ) + sieve_error_handler_unref(&result->action_env.ehandler); + result->action_env.ehandler = sieve_varexpand_ehandler_create (result->ehandler, senv->action_log_format, tab); } @@ -996,7 +1003,7 @@ static bool _sieve_result_implicit_keep bool sieve_result_implicit_keep (struct sieve_result *result) { - _sieve_result_prepare_environment(result); + _sieve_result_prepare_execution(result); return _sieve_result_implicit_keep(result, TRUE); } @@ -1030,7 +1037,7 @@ int sieve_result_execute /* Prepare environment */ - _sieve_result_prepare_environment(result); + _sieve_result_prepare_execution(result); /* Make notice of this attempt */