dovecot-2.0: lib-storage: If subscriptions contains an invalid e...

dovecot at dovecot.org dovecot at dovecot.org
Fri Sep 17 20:38:54 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/f7bd4059c6af
changeset: 12131:f7bd4059c6af
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Sep 17 18:38:47 2010 +0100
description:
lib-storage: If subscriptions contains an invalid entry, don't crash with fs layout.

diffstat:

 src/lib-storage/list/mailbox-list-fs-iter.c |  21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)

diffs (31 lines):

diff -r bdf922d26534 -r f7bd4059c6af src/lib-storage/list/mailbox-list-fs-iter.c
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Fri Sep 17 17:54:22 2010 +0100
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Fri Sep 17 18:38:47 2010 +0100
@@ -680,13 +680,20 @@
 	if (len > 0 && storage_name[len-1] == ns->real_sep)
 		storage_name = t_strndup(storage_name, len-1);
 
-	path = mailbox_list_get_path(ns->list, storage_name,
-				     MAILBOX_LIST_PATH_TYPE_DIR);
-	path_split(path, &dir, &fname);
-	if (ns->list->v.get_mailbox_flags(ns->list, dir, fname,
-					  MAILBOX_LIST_FILE_TYPE_UNKNOWN,
-					  &st, &ctx->info.flags) < 0)
-		ctx->ctx.failed = TRUE;
+	if (!mailbox_list_is_valid_pattern(ns->list, storage_name)) {
+		/* broken entry in subscriptions file */
+		ctx->info.flags = MAILBOX_NONEXISTENT;
+	} else {
+		struct mailbox_list *list = ns->list;
+
+		path = mailbox_list_get_path(list, storage_name,
+					     MAILBOX_LIST_PATH_TYPE_DIR);
+		path_split(path, &dir, &fname);
+		if (list->v.get_mailbox_flags(list, dir, fname,
+					      MAILBOX_LIST_FILE_TYPE_UNKNOWN,
+					      &st, &ctx->info.flags) < 0)
+			ctx->ctx.failed = TRUE;
+	}
 
 	ctx->info.flags |= flags;
 	return &ctx->info;


More information about the dovecot-cvs mailing list