From f6e34e4cf16d2506d865adb35a650c383b8dc6fd Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Thu, 7 Apr 2022 23:05:32 +0200 Subject: [PATCH] imap: fix no-envelope-for-message error Fix the "no envelope available for this message" error that can occur when using the same imap mailbox in another mailclient (e.g. through a webmail interface) at the same time. Complements the fixes in commit 7fe7fe4 ("ui: fix panic in header formatter") and commit 074b0a1 ("view,list: fix crash when viewing incomplete imap messages"). The error is caused when a message attribute update is received by the message store before the message list had a chance to fetch the proper header first. In this case, an (incomplete) message info is stored in the message store and the message list will never fetch the correct header. To prevent this, add only messages to the store with a non-nil envelope but make sure that message attribute updates are properly merged. Signed-off-by: Koni Marti Acked-by: Robin Jarry --- lib/msgstore.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/msgstore.go b/lib/msgstore.go index a29aad4..bd8d54d 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -225,7 +225,9 @@ func (store *MessageStore) Update(msg types.WorkerMessage) { if existing, ok := store.Messages[msg.Info.Uid]; ok && existing != nil { merge(existing, msg.Info) } else { - store.Messages[msg.Info.Uid] = msg.Info + if msg.Info.Envelope != nil { + store.Messages[msg.Info.Uid] = msg.Info + } } seen := false recent := false