Skip to content

fix: prevent unbounded growth of _seen_uids in EmailAdapter (salvage #3379)#3490

Merged
teknium1 merged 1 commit intomainfrom
hermes/hermes-a2b72b01
Mar 28, 2026
Merged

fix: prevent unbounded growth of _seen_uids in EmailAdapter (salvage #3379)#3490
teknium1 merged 1 commit intomainfrom
hermes/hermes-a2b72b01

Conversation

@teknium1
Copy link
Copy Markdown
Contributor

Salvage of #3379 by @memosr. Cherry-picked clean, no modifications needed.

EmailAdapter._seen_uids accumulates every IMAP UID ever seen but never removes any. Long-running gateways processing high-volume inboxes leak memory indefinitely.

Fix caps at 2000 entries, trims to the most recent 1000 when exceeded. IMAP UIDs are monotonically increasing so old UIDs are safe to drop — the IMAP UNSEEN flag prevents re-delivery regardless.

Closes #3379.

EmailAdapter._seen_uids accumulates every IMAP UID ever seen but
never removes any. A long-running gateway processing a high-volume
inbox would leak memory indefinitely — thousands of integers per day.

IMAP UIDs are monotonically increasing integers, so old UIDs are safe
to drop: new messages always have higher UIDs, and the IMAP UNSEEN
flag already prevents re-delivery regardless of our local tracking.

Fix adds _trim_seen_uids() which keeps only the most recent 1000 UIDs
(half of the 2000-entry cap) when the set grows too large. Called
automatically during connect() and after each fetch cycle.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants