diff --git a/src/lib-sieve/plugins/enotify/ntfy-mailto.c b/src/lib-sieve/plugins/enotify/ntfy-mailto.c
index 36ed896da3ca20c8766164ec33e559bd05321c5d..5ebd2ce59ea8be21513de1e0fe542bbf09a07de9 100644
--- a/src/lib-sieve/plugins/enotify/ntfy-mailto.c
+++ b/src/lib-sieve/plugins/enotify/ntfy-mailto.c
@@ -934,7 +934,7 @@ static bool ntfy_mailto_send
 	}
 
 	/* Determine SMTP from address */
-	if ( msgdata->return_path != NULL ) {
+	if ( msgdata->return_path != NULL && *(msgdata->return_path) != '\0' ) {
 		if ( mtctx->from_normalized == NULL ) {
 			from_smtp = senv->postmaster_address;
 		} else {
diff --git a/src/lib-sieve/plugins/notify/cmd-notify.c b/src/lib-sieve/plugins/notify/cmd-notify.c
index fe9d175ec0ceb524adb800987bd205b0ce4a477f..6738df28c6fa519d4022d8a6fa9784a61983e492 100644
--- a/src/lib-sieve/plugins/notify/cmd-notify.c
+++ b/src/lib-sieve/plugins/notify/cmd-notify.c
@@ -863,7 +863,7 @@ static bool act_notify_send
 	/* Send message to all recipients */
 	for ( i = 0; i < count; i++ ) {
 
-		if ( msgdata->return_path != NULL )
+		if ( msgdata->return_path != NULL && *(msgdata->return_path) != '\0' )
 			smtp_handle = sieve_smtp_open
 				(senv, recipients[i].normalized, senv->postmaster_address, &f);
 		else		
diff --git a/src/lib-sieve/sieve-address.c b/src/lib-sieve/sieve-address.c
index 1666180c9271f868c1dcd9914e4f169976337ba0..d43070ce192a5056fa2e6335d309f638bb295e2c 100644
--- a/src/lib-sieve/sieve-address.c
+++ b/src/lib-sieve/sieve-address.c
@@ -255,6 +255,11 @@ bool sieve_rfc2822_mailbox_validate(const char *address, const char **error_r)
 {
 	struct sieve_message_address_parser ctx;
 
+	if ( address == NULL ) {
+		*error_r = "null address";
+		return FALSE;
+	}
+
 	memset(&ctx, 0, sizeof(ctx));
 	
 	ctx.local_part = t_str_new(128);
@@ -276,10 +281,15 @@ bool sieve_rfc2822_mailbox_validate(const char *address, const char **error_r)
 }
 
 const char *sieve_rfc2822_mailbox_normalize
-	(const char *address, const char **error_r)
+(const char *address, const char **error_r)
 {
 	struct sieve_message_address_parser ctx;
 
+	if ( error_r != NULL )
+		*error_r = NULL;
+
+	if ( address == NULL ) return NULL;
+
 	memset(&ctx, 0, sizeof(ctx));
 	
 	ctx.local_part = t_str_new(128);
@@ -293,9 +303,6 @@ const char *sieve_rfc2822_mailbox_normalize
 			*error_r = str_c(ctx.error);
 		return NULL;
 	}
-
-	if ( error_r != NULL )
-		*error_r = NULL;
 		
 	(void)str_lcase(str_c_modifiable(ctx.domain));
 
@@ -361,6 +368,9 @@ int sieve_address_compare
 	/* FIXME: provided addresses are currently assumed to be normalized to 
 	 * local_part@domain
 	 */
+
+	i_assert(address1 != NULL);
+	i_assert(address2 != NULL);
 	 
 	return strcasecmp(address1, address2);
 }
@@ -398,7 +408,7 @@ int sieve_address_compare
 static unsigned char rfc2821_chars[256] = {
 	   DB,    DB,    DB,    DB,    DB,    DB,    DB,    DB, // 0
 	   DB,    QB,    QB,    DB,    DB,    QB,    DB,    DB, // 8
-     DB,    DB,    DB,    DB,    DB,    DB,    DB,    DB, // 16
+	   DB,    DB,    DB,    DB,    DB,    DB,    DB,    DB, // 16
 	   DB,    DB,    DB,    DB,    DB,    DB,    DB,    DB, // 24
 	   QB, DB|AB, QB|DB, DB|AB, DB|AB, DB|AB, DB|AB, DB|AB, // 32
 	   DB,    DB, DB|AB, DB|AB,    DB, DB|AB,    DB, DB|AB, // 40
@@ -748,6 +758,10 @@ const struct sieve_address *sieve_address_parse_envelope_path
 	struct sieve_envelope_address_parser parser;
 	int ret;
 
+	if ( field_value == NULL ) {
+		return t_new(struct sieve_address, 1);
+	}
+
 	parser.data = (const unsigned char *) field_value;
 	parser.end = (const unsigned char *) field_value + strlen(field_value);
 	parser.address = t_new(struct sieve_address, 1);
diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c
index 6898403735f9d06741abf11a977306eec1b3b1d2..e042c654e352c535e66cc65a2882b2ec7238ee32 100644
--- a/src/sieve-tools/sieve-test.c
+++ b/src/sieve-tools/sieve-test.c
@@ -61,8 +61,7 @@ static void *sieve_smtp_open
 	const char *return_path, FILE **file_r)
 {
 	i_info("sending message from <%s> to <%s>:",
-		return_path == NULL || *return_path == '\0' ? "" : return_path, 
-		destination);
+		( return_path == NULL ? "" : return_path ), destination);
 	printf("\nSTART MESSAGE:\n");
 	
 	*file_r = stdout;
diff --git a/src/testsuite/testsuite-smtp.c b/src/testsuite/testsuite-smtp.c
index 18eff1ca8c7baa0551de3b2690a88d245e0785a9..5308d3af28436e71483730c9ef728b03dca71b7e 100644
--- a/src/testsuite/testsuite-smtp.c
+++ b/src/testsuite/testsuite-smtp.c
@@ -81,7 +81,8 @@ void *testsuite_smtp_open
 	
 	smtp_msg.file = p_strdup_printf(testsuite_smtp_pool, 
 		"%s/%d.eml", testsuite_smtp_tmp, smtp_count);
-	smtp_msg.envelope_from = p_strdup(testsuite_smtp_pool, return_path);
+	smtp_msg.envelope_from = 
+		( return_path != NULL ? p_strdup(testsuite_smtp_pool, return_path) : NULL );
 	smtp_msg.envelope_to = p_strdup(testsuite_smtp_pool, destination);
 	 
 	array_append(&testsuite_smtp_messages, &smtp_msg, 1);