From be4e0a59d31349d4a6ece3a556e60c7d7a25964c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 13 Jun 2018 20:09:32 +0300 Subject: [PATCH] doveadm dump: Fix dumping "vsize" header in dovecot.index It was trying to print it as the "vsize" header in dovecot.list.index. This caused confusing output, as well as potentially accessing memory out of bounds. --- src/doveadm/doveadm-dump-index.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/doveadm/doveadm-dump-index.c b/src/doveadm/doveadm-dump-index.c index 58a1b3e372..c8277debf5 100644 --- a/src/doveadm/doveadm-dump-index.c +++ b/src/doveadm/doveadm-dump-index.c @@ -715,7 +715,10 @@ static void dump_record(struct mail_index_view *view, unsigned int seq) printf(" : unseen = %u\n", lrec->unseen); printf(" : recent = %u\n", lrec->recent); printf(" : uidnext = %u\n", lrec->uidnext); - } else if (strcmp(ext[i].name, "vsize") == 0) { + } else if (strcmp(ext[i].name, "vsize") == 0 && + ext[i].record_size >= sizeof(struct mailbox_index_vsize)) { + /* this is "vsize" in dovecot.list.index, not the + 32bit "vsize" in dovecot.index */ const struct mailbox_index_vsize *vrec = data; printf(" : vsize = %"PRIu64"\n", vrec->vsize); printf(" : highest_uid = %u\n", vrec->highest_uid);