Blame SOURCES/dovecot-2.3.10-smtppre.patch

46dd33
diff -up dovecot-2.3.8/src/lib-smtp/smtp-address.c.smtppre dovecot-2.3.8/src/lib-smtp/smtp-address.c
46dd33
--- dovecot-2.3.8/src/lib-smtp/smtp-address.c.smtppre	2019-10-08 10:46:18.000000000 +0200
46dd33
+++ dovecot-2.3.8/src/lib-smtp/smtp-address.c	2020-05-29 19:11:19.340621409 +0200
46dd33
@@ -467,7 +467,7 @@ void smtp_address_detail_parse(pool_t po
46dd33
 		*detail_r = p+1;
46dd33
 	}
46dd33
 
46dd33
-	if (address->domain == NULL)
46dd33
+	if (address->domain == NULL || *address->domain == '\0')
46dd33
 		*username_r = user;
46dd33
 	else if (strchr(user, '@') == NULL ) {
46dd33
 		/* username is just glued to the domain... no SMTP escaping */
46dd33
@@ -548,7 +548,7 @@ void smtp_address_write(string_t *out,
46dd33
 	if (quoted)
46dd33
 		str_append_c(out, '\"');
46dd33
 
46dd33
-	if (address->domain == NULL)
46dd33
+	if (address->domain == NULL || *address->domain == '\0')
46dd33
 		return;
46dd33
 
46dd33
 	str_append_c(out, '@');
46dd33
@@ -587,8 +587,12 @@ void smtp_address_init(struct smtp_addre
46dd33
 	const char *localpart, const char *domain)
46dd33
 {
46dd33
 	i_zero(address);
46dd33
+	if (localpart == NULL || *localpart == '\0')
46dd33
+		return;
46dd33
+
46dd33
 	address->localpart = localpart;
46dd33
-	address->domain = (localpart == NULL ? NULL : domain);
46dd33
+	if (domain != NULL && *domain != '\0')
46dd33
+		address->domain = domain;
46dd33
 }
46dd33
 
46dd33
 int smtp_address_init_from_msg(struct smtp_address *address,
46dd33
@@ -597,7 +601,7 @@ int smtp_address_init_from_msg(struct sm
46dd33
 	const char *p;
46dd33
 
46dd33
 	i_zero(address);
46dd33
-	if (msg_addr->mailbox == NULL)
46dd33
+	if (msg_addr->mailbox == NULL || *msg_addr->mailbox == '\0')
46dd33
 		return 0;
46dd33
 
46dd33
 	/* The message_address_parse() function allows UTF-8 codepoints in
46dd33
@@ -609,7 +613,8 @@ int smtp_address_init_from_msg(struct sm
46dd33
 	}
46dd33
 
46dd33
 	address->localpart = msg_addr->mailbox;
46dd33
-	address->domain = msg_addr->domain;
46dd33
+	if (msg_addr->domain != NULL && *msg_addr->domain != '\0')
46dd33
+		address->domain = msg_addr->domain;
46dd33
 	return 0;
46dd33
 }
46dd33
 
46dd33
@@ -617,8 +622,8 @@ struct smtp_address *
46dd33
 smtp_address_clone(pool_t pool, const struct smtp_address *src)
46dd33
 {
46dd33
 	struct smtp_address *new;
46dd33
-	size_t size, lpsize, dsize = 0;
46dd33
-	char *data, *localpart, *domain = NULL;
46dd33
+	size_t size, lpsize = 0, dsize = 0;
46dd33
+	char *data, *localpart = NULL, *domain = NULL;
46dd33
 
46dd33
 	if (smtp_address_isnull(src))
46dd33
 		return NULL;
46dd33
@@ -626,17 +631,21 @@ smtp_address_clone(pool_t pool, const st
46dd33
 	/* @UNSAFE */
46dd33
 
46dd33
 	size = sizeof(struct smtp_address);
46dd33
-	lpsize = strlen(src->localpart) + 1;
46dd33
-	size = MALLOC_ADD(size, lpsize);
46dd33
-	if (src->domain != NULL) {
46dd33
+	if (src->localpart != NULL && *src->localpart != '\0') {
46dd33
+		lpsize = strlen(src->localpart) + 1;
46dd33
+		size = MALLOC_ADD(size, lpsize);
46dd33
+	}
46dd33
+	if (src->domain != NULL && *src->domain != '\0') {
46dd33
 		dsize = strlen(src->domain) + 1;
46dd33
 		size = MALLOC_ADD(size, dsize);
46dd33
 	}
46dd33
 
46dd33
 	data = p_malloc(pool, size);
46dd33
 	new = (struct smtp_address *)data;
46dd33
-	localpart = PTR_OFFSET(data, sizeof(*new));
46dd33
-	memcpy(localpart, src->localpart, lpsize);
46dd33
+	if (lpsize > 0) {
46dd33
+		localpart = PTR_OFFSET(data, sizeof(*new));
46dd33
+		memcpy(localpart, src->localpart, lpsize);
46dd33
+	}
46dd33
 	if (dsize > 0) {
46dd33
 		domain = PTR_OFFSET(data, sizeof(*new) + lpsize);
46dd33
 		memcpy(domain, src->domain, dsize);
46dd33
@@ -681,8 +690,8 @@ smtp_address_clone_temp(const struct smt
46dd33
 		return NULL;
46dd33
 
46dd33
 	new = t_new(struct smtp_address, 1);
46dd33
-	new->localpart = t_strdup(src->localpart);
46dd33
-	new->domain = t_strdup(src->domain);
46dd33
+	new->localpart = t_strdup_empty(src->localpart);
46dd33
+	new->domain = t_strdup_empty(src->domain);
46dd33
 	return new;
46dd33
 }
46dd33
 
46dd33
@@ -720,7 +729,7 @@ smtp_address_add_detail(pool_t pool, con
46dd33
 	new_addr = p_new(pool, struct smtp_address, 1);
46dd33
 	new_addr->localpart = p_strconcat(pool,
46dd33
 		address->localpart, delim, detail, NULL);
46dd33
-	new_addr->domain = p_strdup(pool, address->domain);
46dd33
+	new_addr->domain = p_strdup_empty(pool, address->domain);
46dd33
 
46dd33
 	return new_addr;
46dd33
 }
46dd33
@@ -737,7 +746,7 @@ smtp_address_add_detail_temp(const struc
46dd33
 	new_addr = t_new(struct smtp_address, 1);
46dd33
 	new_addr->localpart = t_strconcat(
46dd33
 		address->localpart, delim, detail, NULL);
46dd33
-	new_addr->domain = t_strdup(address->domain);
46dd33
+	new_addr->domain = t_strdup_empty(address->domain);
46dd33
 
46dd33
 	return new_addr;
46dd33
 }