[dovecot-cvs] dovecot/src/lib-index/mbox mbox-from.c,1.11,1.12

cras at procontrol.fi cras at procontrol.fi
Tue May 20 22:05:34 EEST 2003


Update of /home/cvs/dovecot/src/lib-index/mbox
In directory danu:/tmp/cvs-serv1914/lib-index/mbox

Modified Files:
	mbox-from.c 
Log Message:
Support From-lines which contain timezone in timestamp.



Index: mbox-from.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mbox/mbox-from.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- mbox-from.c	21 Feb 2003 18:10:54 -0000	1.11
+++ mbox-from.c	20 May 2003 18:05:32 -0000	1.12
@@ -26,11 +26,20 @@
 	msg_end = msg + size;
 
 	/* skip sender */
-	while (*msg != ' ' && msg < msg_end) msg++;
-	while (*msg == ' ' && msg < msg_end) msg++;
+	while (msg < msg_end && *msg != ' ') {
+		if (*msg == '\r' || *msg == '\n')
+			return (time_t)-1;
+		msg++;
+	}
+	while (msg < msg_end && *msg == ' ') msg++;
 
-	/* next 24 chars are the date in asctime() format,
-	   eg. "Thu Nov 29 22:33:52 2001" */
+	/* next 24 chars should be in the date in asctime() format,
+	   eg. "Thu Nov 29 22:33:52 2001"
+
+	   Some some also include timezone:
+
+	   "Thu Nov 29 22:33:52 EEST 2001"
+	*/
 	if (msg+24 > msg_end)
 		return (time_t)-1;
 
@@ -88,10 +97,25 @@
 	tm.tm_sec = (msg[0]-'0') * 10 + (msg[1]-'0');
 	msg += 3;
 
+	/* optional timezone */
+	if (!i_isdigit(msg[0]) || !i_isdigit(msg[1]) ||
+	    !i_isdigit(msg[2]) || !i_isdigit(msg[3])) {
+		/* skip to next space */
+		while (msg < msg_end && *msg != ' ') {
+			if (*msg == '\r' || *msg == '\n')
+				return (time_t)-1;
+			msg++;
+		}
+		if (msg+5 > msg_end)
+			return (time_t)-1;
+		msg++;
+	}
+
 	/* year */
 	if (!i_isdigit(msg[0]) || !i_isdigit(msg[1]) ||
 	    !i_isdigit(msg[2]) || !i_isdigit(msg[3]))
 		return (time_t)-1;
+
 	tm.tm_year = (msg[0]-'0') * 1000 + (msg[1]-'0') * 100 +
 		(msg[2]-'0') * 10 + (msg[3]-'0') - 1900;
 



More information about the dovecot-cvs mailing list