From 47f877ad825069a67fea17abe1cfb09152954da6 Mon Sep 17 00:00:00 2001 From: Steve Cliff Date: Sun, 21 Jun 2026 23:58:09 +0100 Subject: [PATCH] fix(mail): apply search limit and propagate body read error - Cap search results to limit (keep most-recent UIDs) - Propagate io.ReadAll errors from body reads in fetchByUIDSet Co-Authored-By: Claude Opus 4.8 (1M context) --- internal/mail/imap.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/mail/imap.go b/internal/mail/imap.go index 52d76b0..06fb1aa 100644 --- a/internal/mail/imap.go +++ b/internal/mail/imap.go @@ -83,7 +83,10 @@ func (c *Client) fetchByUIDSet(folder string, set *imap.SeqSet, full bool) ([]Me if r == nil { continue } - raw, _ := io.ReadAll(r) + raw, err := io.ReadAll(r) + if err != nil { + return nil, fmt.Errorf("uid %d: read body: %w", m.Uid, err) + } parsed, err := ParseMessage(m.Uid, raw) if err != nil { return nil, err @@ -187,6 +190,9 @@ func (c *Client) Search(folder string, sc SearchCriteria, limit int) ([]Header, if len(uids) == 0 { return nil, nil } + if limit > 0 && len(uids) > limit { + uids = uids[len(uids)-limit:] // keep highest (most recent) UIDs + } return c.FetchHeaders(folder, uids) }