From e756f4c57ffce45a38897f0b5d08cbaffc8de0bc Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Mon, 11 Jan 2010 19:03:37 +0100
Subject: [PATCH] Fixed a few memleaks caused by previous changes in error
 handling.

---
 src/lib-sieve/plugins/enotify/cmd-notify.c |  2 ++
 src/lib-sieve/sieve-result.c               | 13 ++++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/lib-sieve/plugins/enotify/cmd-notify.c b/src/lib-sieve/plugins/enotify/cmd-notify.c
index e3dca400b..13e6c768f 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 1947ecd18..8214deb1a 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 */
 	
-- 
GitLab