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.2.29.rc1~257 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08e9445940d166ee53c176e95d1278f4d8f129f8;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) {