From 4635acae53959f677b2b6beb0377e1fce4b7745f Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Mon, 8 Jun 2020 19:26:45 +0200
Subject: [PATCH] testsuite: Properly check address value parsed from message.

Caused a panic when input was not valid. This is only relevant to the test suite
and doesn't occur anywhere else (apart from the previous similar commit for
lib-sieve-tool).

Panic was:

Panic in file smtp-address.c: line 684 (smtp_address_write): assertion failed: (smtp_char_is_qpair(*p))`
---
 src/testsuite/testsuite-message.c     |  5 +++-
 tests/extensions/vacation/smtp.svtest | 42 +++++++++++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/src/testsuite/testsuite-message.c b/src/testsuite/testsuite-message.c
index c04ab3445..c0105a2d6 100644
--- a/src/testsuite/testsuite-message.c
+++ b/src/testsuite/testsuite-message.c
@@ -48,6 +48,7 @@ static const struct smtp_address *
 testsuite_message_get_address(struct mail *mail, const char *header)
 {
 	struct message_address *addr;
+	struct smtp_address *smtp_addr;
 	const char *str;
 
 	if (mail_get_first_header(mail, header, &str) <= 0)
@@ -57,7 +58,9 @@ testsuite_message_get_address(struct mail *mail, const char *header)
 				     strlen(str), 1, 0);
 	if (addr == NULL || addr->mailbox == NULL || *addr->mailbox == '\0')
 		return NULL;
-	return smtp_address_create_temp(addr->mailbox, addr->domain);
+	if (smtp_address_create_from_msg_temp(addr, &smtp_addr) < 0)
+		return NULL;
+	return smtp_addr;
 }
 
 static void testsuite_message_set_data(struct mail *mail)
diff --git a/tests/extensions/vacation/smtp.svtest b/tests/extensions/vacation/smtp.svtest
index 745192a10..40dbd89aa 100644
--- a/tests/extensions/vacation/smtp.svtest
+++ b/tests/extensions/vacation/smtp.svtest
@@ -155,3 +155,45 @@ test "Cc" {
 		test_fail "envelope sender not null";
 	}
 }
+
+test_result_reset;
+
+test_set "message" text:
+From: stephan@example.org
+Subject: No subject of discussion
+To: nicëøôçêè—öxample.org
+
+Frop
+.
+;
+
+test "Bad recipient address (from message)" {
+    vacation :subject "Tulips" "I am not in today!";
+
+    if not test_result_execute {
+        test_fail "execution of result failed";
+    }
+
+}
+
+test_result_reset;
+
+test_set "message" text:
+From: stephan@example.org
+Subject: No subject of discussion
+To: tss@example.net
+
+Frop
+.
+;
+
+test_set "envelope.to" "nicëøôçêè—öxample.org";
+
+test "Bad recipient address (from envelope)" {
+    vacation :subject "Tulips" "I am not in today!";
+
+    if not test_result_execute {
+        test_fail "execution of result failed";
+    }
+
+}
-- 
GitLab