From dba245c0df3f13758b1e9a8d4bd9a8298bf0f688 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@dovecot.fi>
Date: Sat, 9 Apr 2016 13:53:10 +0200
Subject: [PATCH] lib-sieve: Made parsing of explicit address for mail sender
 setting check the address syntax.

---
 src/lib-sieve/cmd-redirect.c                       |  2 +-
 src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c |  2 +-
 src/lib-sieve/sieve-common.h                       |  2 +-
 src/lib-sieve/sieve-settings.c                     | 12 ++++++++----
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/lib-sieve/cmd-redirect.c b/src/lib-sieve/cmd-redirect.c
index 22bd6db7a..74974688d 100644
--- a/src/lib-sieve/cmd-redirect.c
+++ b/src/lib-sieve/cmd-redirect.c
@@ -362,7 +362,7 @@ static int act_redirect_send
 			sender = senv->postmaster_address;
 			break;
 		case SIEVE_MAIL_SENDER_SOURCE_EXPLICIT:
-			sender = env_from->address;
+			sender = sieve_address_to_string(env_from->address);
 			break;
 		default:
 			break;
diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c
index 737430b34..2f466836f 100644
--- a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c
+++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c
@@ -499,7 +499,7 @@ static int ntfy_mailto_send
 			from_smtp = sieve_message_get_orig_recipient(nenv->msgctx);
 			break;
 		case SIEVE_MAIL_SENDER_SOURCE_EXPLICIT:
-			from_smtp = env_from->address;
+			from_smtp = sieve_address_to_string(env_from->address);
 			break;
 		case SIEVE_MAIL_SENDER_SOURCE_DEFAULT:
 			if ( mtctx->from_normalized != NULL ) {
diff --git a/src/lib-sieve/sieve-common.h b/src/lib-sieve/sieve-common.h
index 508958c23..4191730f4 100644
--- a/src/lib-sieve/sieve-common.h
+++ b/src/lib-sieve/sieve-common.h
@@ -32,7 +32,7 @@ enum sieve_mail_sender_source {
 
 struct sieve_mail_sender {
 	enum sieve_mail_sender_source source;
-	const char *address;
+	const struct sieve_address *address;
 };
 
 /*
diff --git a/src/lib-sieve/sieve-settings.c b/src/lib-sieve/sieve-settings.c
index ae651a1c9..f573db7c5 100644
--- a/src/lib-sieve/sieve-settings.c
+++ b/src/lib-sieve/sieve-settings.c
@@ -8,6 +8,7 @@
 #include "sieve-common.h"
 #include "sieve-limits.h"
 #include "sieve-error.h"
+#include "sieve-address.h"
 #include "sieve-settings.h"
 
 #include <ctype.h>
@@ -224,10 +225,13 @@ bool sieve_setting_get_mail_sender_value
 		} else if ( str_value[0] == '<' &&	str_value[set_len-1] == '>') {
 			sender->source = SIEVE_MAIL_SENDER_SOURCE_EXPLICIT;
 
-			str_value = ph_t_str_trim(t_strndup(str_value+1, set_len-2), "\t ");
-			sender->address = NULL;
-			if ( *str_value != '\0' )
-				sender->address = p_strdup(pool, str_value);
+			sender->address = sieve_address_parse_envelope_path
+				(pool, t_strndup(str_value+1, set_len-2));
+			if (sender->address == NULL) {
+				sieve_sys_warning(svinst,
+					"Invalid explicit address value for setting '%s': "
+					"'%s'", setting, str_value);
+			}
 		} else {
 			sieve_sys_warning(svinst,
 				"Invalid value for setting '%s': '%s'", setting,
-- 
GitLab