]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
maildir: Added asserts to make sure invalid extension records aren't written to uidlist.
authorTimo Sirainen <tss@iki.fi>
Wed, 20 Apr 2011 14:58:03 +0000 (17:58 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 20 Apr 2011 14:58:03 +0000 (17:58 +0300)
src/lib-storage/index/maildir/maildir-uidlist.c

index 8697b4f45b4b7668b7ab962499b388d44da2bdf6..26c1e46895f67fe8ac28bc0dcadd224370f88664 100644 (file)
@@ -1171,6 +1171,8 @@ maildir_uidlist_rec_set_ext(struct maildir_uidlist_rec *rec, pool_t pool,
                p = rec->extensions;
                while (*p != '\0') {
                        /* <key><value>\0 */
+                       i_assert(MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(*p));
+
                        len = strlen((const char *)p) + 1;
                        if (*p != (unsigned char)key)
                                buffer_append(buf, p, len);
@@ -1194,6 +1196,8 @@ void maildir_uidlist_set_ext(struct maildir_uidlist *uidlist, uint32_t uid,
        struct maildir_uidlist_rec *rec;
        int ret;
 
+       i_assert(MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(key));
+
        ret = maildir_uidlist_lookup_rec(uidlist, uid, &rec);
        if (ret <= 0) {
                if (ret < 0)
@@ -1291,6 +1295,7 @@ static int maildir_uidlist_write_fd(struct maildir_uidlist *uidlist, int fd,
                str_printfa(str, "%u", rec->uid);
                if (rec->extensions != NULL) {
                        for (p = rec->extensions; *p != '\0'; ) {
+                               i_assert(MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(*p));
                                len = strlen((const char *)p);
                                str_append_c(str, ' ');
                                str_append_n(str, p, len);
@@ -1870,6 +1875,8 @@ void maildir_uidlist_sync_set_ext(struct maildir_uidlist_sync_ctx *ctx,
        pool_t pool = ctx->partial ?
                ctx->uidlist->record_pool : ctx->record_pool;
 
+       i_assert(MAILDIR_UIDLIST_REC_EXT_KEY_IS_VALID(key));
+
        maildir_uidlist_rec_set_ext(rec, pool, key, value);
 }