diff --git a/crates/jmap-proto/src/types/keyword.rs b/crates/jmap-proto/src/types/keyword.rs index 701baf81b..61cec658f 100644 --- a/crates/jmap-proto/src/types/keyword.rs +++ b/crates/jmap-proto/src/types/keyword.rs @@ -112,13 +112,17 @@ impl JsonObjectParser for Keyword { impl From for Keyword { fn from(value: String) -> Self { - if value.starts_with('$') { + if value + .as_bytes() + .first() + .is_some_and(|&ch| [b'$', b'\\'].contains(&ch)) + { let mut hash = 0; let mut shift = 0; - for &ch in value.as_bytes() { + for &ch in value.as_bytes().iter().skip(1) { if shift < 128 { - hash |= (ch as u128) << shift; + hash |= (ch.to_ascii_lowercase() as u128) << shift; shift += 8; } else { break; diff --git a/tests/resources/jmap/sieve/test_mailbox.sieve b/tests/resources/jmap/sieve/test_mailbox.sieve index d31462472..b60430f1c 100644 --- a/tests/resources/jmap/sieve/test_mailbox.sieve +++ b/tests/resources/jmap/sieve/test_mailbox.sieve @@ -38,7 +38,7 @@ if not mailboxexists ["Drafts", "Sent Items"] { # File into new mailboxes using flags fileinto :create "INBOX / Folder "; -fileinto :flags ["$important", "$seen"] :create "My/Nested/Mailbox/with/multiple/levels"; +fileinto :flags ["$important", "\\Seen"] :create "My/Nested/Mailbox/with/multiple/levels"; # Make sure all mailboxes were created if not mailboxexists "Inbox/Folder" { diff --git a/tests/src/jmap/mod.rs b/tests/src/jmap/mod.rs index 72160b9cb..3d7a78f69 100644 --- a/tests/src/jmap/mod.rs +++ b/tests/src/jmap/mod.rs @@ -381,14 +381,14 @@ pub async fn jmap_tests() { email_query_changes::test(&mut params).await; email_copy::test(&mut params).await; thread_get::test(&mut params).await; - thread_merge::test(&mut params).await;*/ + thread_merge::test(&mut params).await; mailbox::test(&mut params).await; delivery::test(&mut params).await; auth_acl::test(&mut params).await; auth_limits::test(&mut params).await; auth_oauth::test(&mut params).await; event_source::test(&mut params).await; - push_subscription::test(&mut params).await; + push_subscription::test(&mut params).await;*/ sieve_script::test(&mut params).await; vacation_response::test(&mut params).await; email_submission::test(&mut params).await;