Blame cyrus-imapd-acceptinvalidfrom.patch
|
John Dennis |
38f226 |
--- cyrus-imapd-2.2.6/imap/message.c.acceptinvalidfrom 2004-10-30 15:03:02.220642392 -0700
|
|
John Dennis |
38f226 |
+++ cyrus-imapd-2.2.6/imap/message.c 2004-10-30 15:06:01.838336352 -0700
|
|
John Dennis |
38f226 |
@@ -229,6 +229,8 @@
|
|
John Dennis |
38f226 |
int reject8bit = config_getswitch(IMAPOPT_REJECT8BIT);
|
|
John Dennis |
38f226 |
int munge8bit = config_getswitch(IMAPOPT_MUNGE8BIT);
|
|
John Dennis |
38f226 |
int inheader = 1, blankline = 1;
|
|
John Dennis |
38f226 |
+ char is_from;
|
|
John Dennis |
38f226 |
+ static const char * from_header = "From ";
|
|
John Dennis |
38f226 |
|
|
John Dennis |
38f226 |
while (size) {
|
|
John Dennis |
38f226 |
n = prot_read(from, buf, size > 4096 ? 4096 : size);
|
|
John Dennis |
38f226 |
@@ -294,8 +296,20 @@
|
|
John Dennis |
38f226 |
/* Check for valid header name */
|
|
John Dennis |
38f226 |
if (sawnl && buf[0] != ' ' && buf[0] != '\t') {
|
|
John Dennis |
38f226 |
if (buf[0] == ':') return IMAP_MESSAGE_BADHEADER;
|
|
John Dennis |
38f226 |
- for (p = (unsigned char *)buf; *p != ':'; p++) {
|
|
John Dennis |
38f226 |
- if (*p <= ' ') return IMAP_MESSAGE_BADHEADER;
|
|
John Dennis |
38f226 |
+ p = (unsigned char *) buf;
|
|
John Dennis |
38f226 |
+ if (*p == '>')
|
|
John Dennis |
38f226 |
+ p++;
|
|
John Dennis |
38f226 |
+ if (*p == from_header[0])
|
|
John Dennis |
38f226 |
+ is_from = 0;
|
|
John Dennis |
38f226 |
+ else
|
|
John Dennis |
38f226 |
+ is_from = -1;
|
|
John Dennis |
38f226 |
+ for (; *p != ':' && is_from < 5; p++) {
|
|
John Dennis |
38f226 |
+ if (is_from > 0 && *p != from_header[is_from])
|
|
John Dennis |
38f226 |
+ is_from = -1;
|
|
John Dennis |
38f226 |
+ if (is_from >= 0)
|
|
John Dennis |
38f226 |
+ is_from++;
|
|
John Dennis |
38f226 |
+ else
|
|
John Dennis |
38f226 |
+ if (*p <= ' ') return IMAP_MESSAGE_BADHEADER;
|
|
John Dennis |
38f226 |
}
|
|
John Dennis |
38f226 |
}
|
|
John Dennis |
38f226 |
|