dovecot-2.2: lib-storage: Don't crash if backend doesn't have su...

dovecot at dovecot.org dovecot at dovecot.org
Wed Jun 12 21:25:21 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/4b9a43201a71
changeset: 16497:4b9a43201a71
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Jun 12 21:25:09 2013 +0300
description:
lib-storage: Don't crash if backend doesn't have subscriptions file.

diffstat:

 src/lib-storage/list/mailbox-list-fs-iter.c       |  3 ++-
 src/lib-storage/list/mailbox-list-fs.c            |  6 ++++++
 src/lib-storage/list/mailbox-list-index-backend.c |  6 ++++++
 src/lib-storage/list/mailbox-list-maildir.c       |  6 ++++++
 src/lib-storage/list/mailbox-list-subscriptions.c |  3 ++-
 5 files changed, 22 insertions(+), 2 deletions(-)

diffs (74 lines):

diff -r 7057dfeaeb1a -r 4b9a43201a71 src/lib-storage/list/mailbox-list-fs-iter.c
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Wed Jun 12 21:25:09 2013 +0300
@@ -153,7 +153,8 @@
 		dir->info_flags |= MAILBOX_SELECT;
 		return 0;
 	}
-	if (strcmp(d->d_name, ctx->ctx.list->set.subscription_fname) == 0) {
+	if (ctx->ctx.list->set.subscription_fname != NULL &&
+	    strcmp(d->d_name, ctx->ctx.list->set.subscription_fname) == 0) {
 		/* if this is the subscriptions file, skip it */
 		root_dir = mailbox_list_get_root_forced(ctx->ctx.list,
 							MAILBOX_LIST_PATH_TYPE_DIR);
diff -r 7057dfeaeb1a -r 4b9a43201a71 src/lib-storage/list/mailbox-list-fs.c
--- a/src/lib-storage/list/mailbox-list-fs.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-fs.c	Wed Jun 12 21:25:09 2013 +0300
@@ -170,6 +170,12 @@
 	enum mailbox_list_path_type type;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	type = _list->set.control_dir != NULL ?
 		MAILBOX_LIST_PATH_TYPE_CONTROL : MAILBOX_LIST_PATH_TYPE_DIR;
 
diff -r 7057dfeaeb1a -r 4b9a43201a71 src/lib-storage/list/mailbox-list-index-backend.c
--- a/src/lib-storage/list/mailbox-list-index-backend.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-index-backend.c	Wed Jun 12 21:25:09 2013 +0300
@@ -167,6 +167,12 @@
 	struct index_mailbox_list *list = (struct index_mailbox_list *)_list;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
diff -r 7057dfeaeb1a -r 4b9a43201a71 src/lib-storage/list/mailbox-list-maildir.c
--- a/src/lib-storage/list/mailbox-list-maildir.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Wed Jun 12 21:25:09 2013 +0300
@@ -180,6 +180,12 @@
 		(struct maildir_mailbox_list *)_list;
 	const char *path;
 
+	if (_list->set.subscription_fname == NULL) {
+		mailbox_list_set_error(_list, MAIL_ERROR_NOTPOSSIBLE,
+				       "Subscriptions not supported");
+		return -1;
+	}
+
 	path = t_strconcat(_list->set.control_dir != NULL ?
 			   _list->set.control_dir : _list->set.root_dir,
 			   "/", _list->set.subscription_fname, NULL);
diff -r 7057dfeaeb1a -r 4b9a43201a71 src/lib-storage/list/mailbox-list-subscriptions.c
--- a/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Jun 12 21:16:06 2013 +0300
+++ b/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Jun 12 21:25:09 2013 +0300
@@ -126,7 +126,8 @@
 
 	type = src_list->set.control_dir != NULL ?
 		MAILBOX_LIST_PATH_TYPE_CONTROL : MAILBOX_LIST_PATH_TYPE_DIR;
-	if (!mailbox_list_get_root_path(src_list, type, &path)) {
+	if (!mailbox_list_get_root_path(src_list, type, &path) ||
+	    src_list->set.subscription_fname == NULL) {
 		/* no subscriptions (e.g. pop3c) */
 		return 0;
 	}


More information about the dovecot-cvs mailing list