[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