Fix: Strict RFC822.SIZE == BODY[] length check discards good mail

This commit is contained in:
Maurus Decimus
2026-06-27 12:00:12 +02:00
parent 3e9d4593f7
commit 6ca561fff5
9 changed files with 31 additions and 20 deletions
+1 -1
View File
@@ -222,7 +222,7 @@ fn try_via_principal(
return Ok(None);
}
Err(JmapError::RetriesExhausted(_)) | Err(JmapError::Malformed(_)) => {
return Ok(None)
return Ok(None);
}
Err(e) => return Err(DiscoveryError::Transport(e)),
};
+3 -1
View File
@@ -75,7 +75,9 @@ mod tests {
let conn = mem();
let id = insert(&conn, "Sent", Some("sent"));
assert_eq!(
unique_role(&conn, Some("sent"), Some(id)).unwrap().as_deref(),
unique_role(&conn, Some("sent"), Some(id))
.unwrap()
.as_deref(),
Some("sent")
);
}
+1 -2
View File
@@ -160,8 +160,7 @@ pub fn reconcile(
.unwrap_or(0);
let mut uploader = Uploader::new(net, &ctx.conn);
let mut taken_roles: HashSet<String> =
targets.iter().filter_map(|t| t.role.clone()).collect();
let mut taken_roles: HashSet<String> = targets.iter().filter_map(|t| t.role.clone()).collect();
let interleave = ty == ObjectType::FileNode;
for d in 0..=max_depth {
let level: Vec<&LocalNode> = to_create
+2 -9
View File
@@ -582,12 +582,7 @@ fn upsert_mailboxes(
tx.execute(
"INSERT INTO mailboxes (name, parent_id, role, sort_order, is_subscribed)
VALUES (?1, ?2, ?3, 0, ?4)",
params![
folder.leaf,
parent_local,
role,
folder.subscribed as i64
],
params![folder.leaf, parent_local, role, folder.subscribed as i64],
)?;
let new_id = tx.last_insert_rowid();
db::imap_ids::insert_mailbox(&tx, source_id, &folder.name, new_id)?;
@@ -927,12 +922,10 @@ fn insert_single_message(
logger,
LEVEL_DEFAULT,
&format!(
"folder {folder:?} uid {uid}: BODY[] {} bytes vs RFC822.SIZE {declared_size}, skipping",
"folder {folder:?} uid {uid}: BODY[] {} bytes vs RFC822.SIZE {declared_size}, importing the fetched literal",
body.len()
),
);
counts.skipped += 1;
return Ok(());
}
let translation = translate_flags(&attrs.flags, include_deleted);
if translation.has_deleted_flag && !include_deleted {