IMAP: Fix shared folder double nesting (test suite credits to @ochnygosch) (fixes #2358 closes #2525)

This commit is contained in:
mdecimus
2025-12-18 16:04:06 +01:00
parent c59cc8c9d3
commit c5d357ca28
2 changed files with 55 additions and 3 deletions

View File

@@ -177,7 +177,7 @@ impl<T: SessionStream> SessionData<T> {
let mut parent_mailbox_name = None;
let (account_id, path) = {
let mailboxes = self.mailboxes.lock();
let (account, full_path) =
let (account, full_path, prefix) =
if path.first() == Some(&self.server.core.jmap.shared_folder.as_str()) {
// Shared Folders/<username>/<folder>
if path.len() < 3 {
@@ -201,7 +201,7 @@ impl<T: SessionStream> SessionData<T> {
.skip(1)
.find(|account| account.prefix == prefix)
{
(account, full_path)
(account, full_path, prefix)
} else {
#[allow(clippy::unnecessary_literal_unwrap)]
return Err(trc::ImapEvent::Error.into_err().details(format!(
@@ -215,7 +215,7 @@ impl<T: SessionStream> SessionData<T> {
*root = "INBOX";
}
(account, path.join("/"))
(account, path.join("/"), None)
} else {
return Err(trc::ImapEvent::Error
.into_err()
@@ -241,6 +241,11 @@ impl<T: SessionStream> SessionData<T> {
parent_mailbox_id = mailbox_id.into();
parent_mailbox_name = mailbox_name.into();
break;
} else if prefix
.as_ref()
.is_some_and(|prefix| prefix == &mailbox_name)
{
break;
} else {
create_path.push(path.pop().unwrap());
}