snowfield/machines/akhaten/stalwart.patch

46 lines
1.8 KiB
Diff

From 1282e77ea96e5154011b3d4607c15140003ee2e6 Mon Sep 17 00:00:00 2001
From: mdecimus <mauro@stalw.art>
Date: Sun, 9 Mar 2025 17:47:40 +0100
Subject: [PATCH] Do not panic when mailboxId is not found (closes #1293)
---
crates/imap/src/op/list.rs | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/crates/imap/src/op/list.rs b/crates/imap/src/op/list.rs
index 250db4be..4231ec1b 100644
--- a/crates/imap/src/op/list.rs
+++ b/crates/imap/src/op/list.rs
@@ -22,6 +22,7 @@ use imap_proto::{
},
receiver::Request,
};
+use trc::StoreEvent;
use super::ImapContext;
@@ -202,7 +203,22 @@ impl<T: SessionStream> SessionData<T> {
for (mailbox_name, mailbox_id) in &account.mailbox_names {
if matches_pattern(&patterns, mailbox_name) {
- let mailbox = account.mailbox_state.get(mailbox_id).unwrap();
+ let mailbox = if let Some(mailbox) = account.mailbox_state.get(mailbox_id) {
+ mailbox
+ } else {
+ trc::event!(
+ Store(StoreEvent::UnexpectedError),
+ Details = "IMAP mailbox no longer present in account state",
+ Id = *mailbox_id,
+ Details = account
+ .mailbox_state
+ .keys()
+ .copied()
+ .map(trc::Value::from)
+ .collect::<Vec<_>>()
+ );
+ continue;
+ };
let mut has_recursive_match = false;
if recursive_match {
let prefix = format!("{}/", mailbox_name);