]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fix assert-crash on corrupted dovecot.list.index with name_id==0
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 21 Feb 2017 11:08:59 +0000 (13:08 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 21 Feb 2017 11:09:48 +0000 (13:09 +0200)
Fixes:
Panic: file hash.c: line 213 (hash_table_insert_node): assertion failed: (key != NULL)

src/lib-storage/list/mailbox-list-index.c

index 1e8c4cba163c18685f3eee40b3b401b9161eaf3a..58e6a01f16525745da46c0260fca3f033b5eefbf 100644 (file)
@@ -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) {