From: Timo Sirainen Date: Wed, 13 Jun 2018 17:09:32 +0000 (+0300) Subject: doveadm dump: Fix dumping "vsize" header in dovecot.index X-Git-Tag: 2.3.4~283 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be4e0a59d31349d4a6ece3a556e60c7d7a25964c;p=thirdparty%2Fdovecot%2Fcore.git 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. --- 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);