[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