From: Timo Sirainen Date: Tue, 21 Feb 2017 11:08:59 +0000 (+0200) Subject: lib-storage: Fix assert-crash on corrupted dovecot.list.index with name_id==0 X-Git-Tag: 2.3.0.rc1~2034 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17909931dcd1ba72ba223276901d4acd360b1038;p=thirdparty%2Fdovecot%2Fcore.git 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) --- diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 1e8c4cba16..58e6a01f16 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -241,6 +241,8 @@ mailbox_list_index_generate_name(struct mailbox_list_index *ilist, 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 @@ static int mailbox_list_index_parse_records(struct mailbox_list_index *ilist, 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) {