]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Avoid assert-crashing on keyword-update record with empty keyword.
authorTimo Sirainen <tss@iki.fi>
Wed, 4 Jan 2012 15:26:25 +0000 (17:26 +0200)
committerTimo Sirainen <tss@iki.fi>
Wed, 4 Jan 2012 15:26:25 +0000 (17:26 +0200)
src/lib-index/mail-index-sync-keywords.c
src/lib-index/mail-index-sync.c
src/lib-index/mail-transaction-log-view.c

index 872901afe40f4be728a8e859d9aaa0b864c0ed10..5889ee05795c54c5779638476ad4c98c57cfa83f 100644 (file)
@@ -261,6 +261,8 @@ int mail_index_sync_keywords(struct mail_index_sync_map_ctx *ctx,
        unsigned int keyword_idx;
        int ret;
 
+       i_assert(rec->name_size > 0);
+
        seqset_offset = sizeof(*rec) + rec->name_size;
        if ((seqset_offset % 4) != 0)
                seqset_offset += 4 - (seqset_offset % 4);
@@ -270,11 +272,6 @@ int mail_index_sync_keywords(struct mail_index_sync_map_ctx *ctx,
        end = CONST_PTR_OFFSET(rec, hdr->size);
 
        keyword_name = t_strndup(rec + 1, rec->name_size);
-       if (*keyword_name == '\0') {
-               mail_index_sync_set_corrupted(ctx,
-                                             "Trying to use empty keyword");
-               return -1;
-       }
        if (!keyword_lookup(ctx, keyword_name, &keyword_idx))
                keywords_header_add(ctx, keyword_name, &keyword_idx);
 
index 77f1747315ecb0fcdb10d9b67f46c3286acdec89..a8063914066aa31c3ca08865ffc83b619332fbab 100644 (file)
@@ -83,6 +83,8 @@ static void mail_index_sync_add_keyword_update(struct mail_index_sync_ctx *ctx)
        uint32_t uid;
        size_t uidset_offset, i, size;
 
+       i_assert(u->name_size > 0);
+
        uidset_offset = sizeof(*u) + u->name_size;
        if ((uidset_offset % 4) != 0)
                uidset_offset += 4 - (uidset_offset % 4);
index 5c743a24f80a944bc2dc8e34a6a79bb741e61831..93bdf917fda8a7503ecad7fa9cb787b7140793ce 100644 (file)
@@ -519,6 +519,11 @@ log_view_is_record_valid(struct mail_transaction_log_file *file,
                if ((seqset_offset % 4) != 0)
                        seqset_offset += 4 - (seqset_offset % 4);
 
+               if (rec->name_size == 0) {
+                       mail_transaction_log_file_set_corrupted(file,
+                               "Trying to use empty keyword");
+                       return FALSE;
+               }
                if (seqset_offset > rec_size) {
                        mail_transaction_log_file_set_corrupted(file,
                                "Invalid keyword update record size");