changeset 21651:79d9124f8c8b

lib-storage: Fix assert-crash on corrupted dovecot.list.index with name_id==0 Fixes: Panic: file hash.c: line 213 (hash_table_insert_node): assertion failed: (key != NULL)
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 21 Feb 2017 13:08:59 +0200
parents 5fb623020110
children e04d881da1fb
files src/lib-storage/list/mailbox-list-index.c
diffstat 1 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index.c	Mon Feb 20 19:35:45 2017 +0200
+++ b/src/lib-storage/list/mailbox-list-index.c	Tue Feb 21 13:08:59 2017 +0200
@@ -241,6 +241,8 @@
 	guid_128_t guid;
 	char *name;
 
+	i_assert(node->name_id != 0);
+
 	guid_128_generate(guid);
 	name = p_strdup_printf(ilist->mailbox_pool, "%s%s", prefix,
 			       guid_128_to_string(guid));
@@ -317,6 +319,10 @@
 		irec = data;
 
 		node->name_id = irec->name_id;
+		if (node->name_id == 0) {
+			/* invalid name_id - assign a new one */
+			node->name_id = ++ilist->highest_name_id;
+		}
 		node->name = hash_table_lookup(ilist->mailbox_names,
 					       POINTER_CAST(irec->name_id));
 		if (node->name == NULL) {