dovecot-2.0: maildir: Remove invalid extension records from dove...

dovecot at dovecot.org dovecot at dovecot.org
Wed Apr 20 17:58:14 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.0/rev/4fe53879ceb1
changeset: 12747:4fe53879ceb1
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Apr 20 17:57:20 2011 +0300
description:
maildir: Remove invalid extension records from dovecot-uidlist.
For now we'll assume that if the key is outside A..Z it's invalid. Since
only 4 keys are used currently, there is still a lot of letters available
for future use.

diffstat:

 src/lib-storage/index/maildir/maildir-uidlist.c |  11 +++++++++--
 src/lib-storage/index/maildir/maildir-uidlist.h |   2 ++
 2 files changed, 11 insertions(+), 2 deletions(-)

diffs (33 lines):

diff -r d3d635ee3016 -r 4fe53879ceb1 src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Apr 20 17:44:36 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Apr 20 17:57:20 2011 +0300
@@ -423,8 +423,15 @@
 		/* skip over an extension field */
 		start = line;
 		while (*line != ' ' && *line != '\0') line++;
-		buffer_append(buf, start, line - start);
-		buffer_append_c(buf, '\0');
+		if (MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(*start)) {
+			buffer_append(buf, start, line - start);
+			buffer_append_c(buf, '\0');
+		} else {
+			maildir_uidlist_set_corrupted(uidlist,
+				"Invalid extension record, removing: %s",
+				t_strdup_until(start, line));
+			uidlist->recreate = TRUE;
+		}
 		while (*line == ' ') line++;
 	}
 
diff -r d3d635ee3016 -r 4fe53879ceb1 src/lib-storage/index/maildir/maildir-uidlist.h
--- a/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Apr 20 17:44:36 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-uidlist.h	Wed Apr 20 17:57:20 2011 +0300
@@ -37,6 +37,8 @@
 	MAILDIR_UIDLIST_HDR_EXT_POP3_UIDL_FORMAT	= 'P'
 };
 
+#define MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(c) \
+	((c) >= 'A' && (c) <= 'Z')
 enum maildir_uidlist_rec_ext_key {
 	/* Physical message size. If filename also contains ,S=<vsize> this
 	   isn't written to uidlist. */


More information about the dovecot-cvs mailing list