From ac1c79d03888e634d26914780f7a7bc9cf3bd4b6 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 20 Apr 2011 17:58:03 +0300 Subject: [PATCH] maildir: Added asserts to make sure invalid extension records aren't written to uidlist. --- src/lib-storage/index/maildir/maildir-uidlist.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib-storage/index/maildir/maildir-uidlist.c b/src/lib-storage/index/maildir/maildir-uidlist.c index 8697b4f45b..26c1e46895 100644 --- a/src/lib-storage/index/maildir/maildir-uidlist.c +++ b/src/lib-storage/index/maildir/maildir-uidlist.c @@ -1171,6 +1171,8 @@ maildir_uidlist_rec_set_ext(struct maildir_uidlist_rec *rec, pool_t pool, p = rec->extensions; while (*p != '\0') { /* \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); } -- 2.47.3