changeset 13078:a3002de95797

lib-storage: Don't access mail->box->view, but mail->transaction->view. They may not be the same. In such cases e.g. mail_set_uid() may have accessed a wrong mail.
author Timo Sirainen <tss@iki.fi>
date Thu, 22 Mar 2012 18:07:41 +0200
parents 2fb267a8077a
children ff1364d4d528
files src/lib-storage/index/index-mail.c src/plugins/virtual/virtual-mail.c
diffstat 2 files changed, 6 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-mail.c	Wed Mar 21 13:43:56 2012 +0200
+++ b/src/lib-storage/index/index-mail.c	Thu Mar 22 18:07:41 2012 +0200
@@ -1332,7 +1332,7 @@
 
 		/* open the stream only if we didn't get here from
 		   mailbox_save_init() */
-		hdr = mail_index_get_header(_mail->box->view);
+		hdr = mail_index_get_header(_mail->transaction->view);
 		if (!_mail->saving && _mail->uid < hdr->next_uid)
 			(void)mail_get_stream(_mail, NULL, NULL, &input);
 	}
@@ -1343,7 +1343,7 @@
 	struct index_mail *mail = (struct index_mail *)_mail;
 	uint32_t seq;
 
-	if (mail_index_lookup_seq(_mail->box->view, uid, &seq)) {
+	if (mail_index_lookup_seq(_mail->transaction->view, uid, &seq)) {
 		index_mail_set_seq(_mail, seq);
 		return TRUE;
 	} else {
--- a/src/plugins/virtual/virtual-mail.c	Wed Mar 21 13:43:56 2012 +0200
+++ b/src/plugins/virtual/virtual-mail.c	Thu Mar 22 18:07:41 2012 +0200
@@ -116,8 +116,8 @@
 	const void *data;
 	bool expunged;
 
-	mail_index_lookup_ext(mail->box->view, seq, mbox->virtual_ext_id,
-			      &data, &expunged);
+	mail_index_lookup_ext(mail->transaction->view, seq,
+			      mbox->virtual_ext_id, &data, &expunged);
 	vrec = data;
 
 	bbox = virtual_backend_box_lookup(mbox, vrec->mailbox_id);
@@ -130,7 +130,7 @@
 
 	vmail->imail.data.seq = seq;
 	mail->seq = seq;
-	mail_index_lookup_uid(mail->box->view, seq, &mail->uid);
+	mail_index_lookup_uid(mail->transaction->view, seq, &mail->uid);
 
 	if (!vmail->lost) {
 		mail->expunged = vmail->backend_mail->expunged;
@@ -147,7 +147,7 @@
 {
 	uint32_t seq;
 
-	if (!mail_index_lookup_seq(mail->box->view, uid, &seq))
+	if (!mail_index_lookup_seq(mail->transaction->view, uid, &seq))
 		return FALSE;
 
 	virtual_mail_set_seq(mail, seq);