[dovecot-cvs] dovecot/src/lib-imap imap-bodystructure.c,1.15,1.16 imap-envelope.c,1.11,1.12

cras at procontrol.fi cras at procontrol.fi
Wed Nov 6 09:45:11 EET 2002


Update of /home/cvs/dovecot/src/lib-imap
In directory danu:/tmp/cvs-serv14745

Modified Files:
	imap-bodystructure.c imap-envelope.c 
Log Message:
A few extra checks to prevent memory eating by sending mails with multiple
header fields with same name.



Index: imap-bodystructure.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-bodystructure.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- imap-bodystructure.c	16 Oct 2002 22:54:18 -0000	1.15
+++ imap-bodystructure.c	6 Nov 2002 07:45:08 -0000	1.16
@@ -173,7 +173,7 @@
 	/* fix the name to be \0-terminated */
 	name = t_strndup(name, name_len);
 
-	if (strcasecmp(name, "Content-Type") == 0) {
+	if (strcasecmp(name, "Content-Type") == 0 && part_data->content_type) {
 		part_data->str = t_string_new(256);
 		(void)message_content_parse_header(t_strndup(value, value_len),
 						   parse_content_type,
@@ -181,17 +181,21 @@
 						   part_data);
 		part_data->content_type_params =
 			p_strdup(pool, part_data->str->str);
-	} else if (strcasecmp(name, "Content-Transfer-Encoding") == 0) {
+	} else if (strcasecmp(name, "Content-Transfer-Encoding") == 0 &&
+		   data->content_transfer_encoding == NULL) {
 		(void)message_content_parse_header(t_strndup(value, value_len),
 						parse_content_transfer_encoding,
 						NULL, part_data);
-	} else if (strcasecmp(name, "Content-ID") == 0) {
+	} else if (strcasecmp(name, "Content-ID") == 0 &&
+		   part_data->content_id == NULL) {
 		part_data->content_id =
 			imap_quote_value(pool, value, value_len);
-	} else if (strcasecmp(name, "Content-Description") == 0) {
+	} else if (strcasecmp(name, "Content-Description") == 0 &&
+		   part_data->content_description == NULL) {
 		part_data->content_description =
 			imap_quote_value(pool, value, value_len);
-	} else if (strcasecmp(name, "Content-Disposition") == 0) {
+	} else if (strcasecmp(name, "Content-Disposition") == 0 &&
+		   part_data->content_disposition_params == NULL) {
 		part_data->str = t_string_new(256);
 		(void)message_content_parse_header(t_strndup(value, value_len),
 						   parse_content_disposition,
@@ -203,7 +207,8 @@
 		(void)message_content_parse_header(t_strndup(value, value_len),
 						   parse_content_language, NULL,
 						   part_data);
-	} else if (strcasecmp(name, "Content-MD5") == 0) {
+	} else if (strcasecmp(name, "Content-MD5") == 0 &&
+		   part_data->content_md5 == NULL) {
 		part_data->content_md5 =
 			imap_quote_value(pool, value, value_len);
 	} else if (parent_rfc822) {

Index: imap-envelope.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-envelope.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- imap-envelope.c	16 Oct 2002 22:50:21 -0000	1.11
+++ imap-envelope.c	6 Nov 2002 07:45:08 -0000	1.12
@@ -38,25 +38,27 @@
 		(*data)->pool = pool;
 	}
 
-	if (strcasecmp(name, "Date") == 0)
+	if (strcasecmp(name, "Date") == 0 && (*data)->date == NULL)
 		(*data)->date = imap_quote_value(pool, value, value_len);
-	else if (strcasecmp(name, "Subject") == 0)
+	else if (strcasecmp(name, "Subject") == 0 && (*data)->subject == NULL)
 		(*data)->subject = imap_quote_value(pool, value, value_len);
-	else if (strcasecmp(name, "From") == 0)
+	else if (strcasecmp(name, "From") == 0 && (*data)->from == NULL)
 		(*data)->from = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "Sender") == 0)
+	else if (strcasecmp(name, "Sender") == 0 && (*data)->sender == NULL)
 		(*data)->sender = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "Reply-To") == 0)
+	else if (strcasecmp(name, "Reply-To") == 0 && (*data)->reply_to == NULL)
 		(*data)->reply_to = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "To") == 0)
+	else if (strcasecmp(name, "To") == 0 && (*data)->to == NULL)
 		(*data)->to = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "Cc") == 0)
+	else if (strcasecmp(name, "Cc") == 0 && (*data)->cc == NULL)
 		(*data)->cc = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "Bcc") == 0)
+	else if (strcasecmp(name, "Bcc") == 0 && (*data)->bcc == NULL)
 		(*data)->bcc = parse_address(pool, value, value_len);
-	else if (strcasecmp(name, "In-Reply-To") == 0)
+	else if (strcasecmp(name, "In-Reply-To") == 0 &&
+		 (*data)->in_reply_to == NULL)
 		(*data)->in_reply_to = imap_quote_value(pool, value, value_len);
-	else if (strcasecmp(name, "Message-Id") == 0)
+	else if (strcasecmp(name, "Message-Id") == 0 &&
+		 (*data)->message_id == NULL)
 		(*data)->message_id = imap_quote_value(pool, value, value_len);
 }
 




More information about the dovecot-cvs mailing list