From 42d0dcf88c4a08bc90fad2daaf3f2262c901352f Mon Sep 17 00:00:00 2001 From: Maurus Decimus <11444311+mdecimus@users.noreply.github.com> Date: Thu, 18 Jun 2026 15:43:18 +0200 Subject: [PATCH] Fix JMAP: `filter: null` rejected as `notRequest` on `/query` and `/queryChanges` --- CHANGELOG.md | 3 ++- crates/jmap-proto/src/method/query.rs | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7aa4306e..ba786c2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,8 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If ## Fixed - JMAP: - Default calendars and address books are not subscribed by default. - - Do not reject an unchanged immutable `id` property. + - Unchanged immutable `id` property is rejected on `/set`. + - `filter: null` rejected as `notRequest` on `/query` and `/queryChanges`. - OIDC: Add default domain name to groups that are not email addresses. - RocksDB: Enable blob garbage collection to reclaim disk space from deleted blobs. diff --git a/crates/jmap-proto/src/method/query.rs b/crates/jmap-proto/src/method/query.rs index cc094478..886c9bfd 100644 --- a/crates/jmap-proto/src/method/query.rs +++ b/crates/jmap-proto/src/method/query.rs @@ -195,6 +195,20 @@ where write!(formatter, "a filter object") } + fn visit_unit(self) -> Result<(), E> + where + E: de::Error, + { + Ok(()) + } + + fn visit_none(self) -> Result<(), E> + where + E: de::Error, + { + Ok(()) + } + fn visit_map(self, mut map: V) -> Result<(), V::Error> where V: MapAccess<'de>, @@ -261,7 +275,7 @@ where } } - deserializer.deserialize_map(FilterVisitor(self.0)) + deserializer.deserialize_any(FilterVisitor(self.0)) } }