dovecot-2.2: dsync: Don't crash when syncing multiple namespaces.

dovecot at dovecot.org dovecot at dovecot.org
Wed Nov 28 09:14:49 EET 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/22799e820158
changeset: 15430:22799e820158
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Nov 28 09:14:33 2012 +0200
description:
dsync: Don't crash when syncing multiple namespaces.

diffstat:

 src/doveadm/dsync/dsync-mailbox-tree.c |  13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diffs (37 lines):

diff -r e123e31de340 -r 22799e820158 src/doveadm/dsync/dsync-mailbox-tree.c
--- a/src/doveadm/dsync/dsync-mailbox-tree.c	Wed Nov 28 07:25:18 2012 +0200
+++ b/src/doveadm/dsync/dsync-mailbox-tree.c	Wed Nov 28 09:14:33 2012 +0200
@@ -301,7 +301,9 @@
 		return 0;
 
 	old_node = hash_table_lookup(tree->guid_hash, guid);
-	if (old_node != NULL) {
+	if (old_node == NULL)
+		hash_table_insert(tree->guid_hash, guid, node);
+	else if (old_node != node) {
 		i_error("Duplicate mailbox GUID %s "
 			"for mailboxes %s and %s",
 			guid_128_to_string(node->mailbox_guid),
@@ -309,7 +311,6 @@
 			dsync_mailbox_node_get_full_name(tree, node));
 		return -1;
 	}
-	hash_table_insert(tree->guid_hash, guid, node);
 	return 0;
 }
 
@@ -320,10 +321,10 @@
 	const char *name;
 	int ret = 0;
 
-	i_assert(!hash_table_is_created(tree->guid_hash));
-
-	hash_table_create(&tree->guid_hash, tree->pool, 0,
-			  guid_128_hash, guid_128_cmp);
+	if (!hash_table_is_created(tree->guid_hash)) {
+		hash_table_create(&tree->guid_hash, tree->pool, 0,
+				  guid_128_hash, guid_128_cmp);
+	}
 	iter = dsync_mailbox_tree_iter_init(tree);
 	while (dsync_mailbox_tree_iter_next(iter, &name, &node)) {
 		if (dsync_mailbox_tree_guid_hash_add(tree, node) < 0)


More information about the dovecot-cvs mailing list