From 630be6ad32e8d3c5fb418c19b5865b42ffc894e9 Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Tue, 21 Apr 2026 12:29:50 -0700 Subject: [PATCH] fix: check io.ReadAll errors (#713) (#726) Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> --- fetcher/fetcher.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fetcher/fetcher.go b/fetcher/fetcher.go index 40e0b91e6e5158d18a68d424482ced7981074296..d03cb2d7879b098a88558ac4291a614232f4e652 100644 --- a/fetcher/fetcher.go +++ b/fetcher/fetcher.go @@ -135,7 +135,10 @@ func deliveryHeadersMatch(data []byte, fetchEmail string) bool { func decodePart(reader io.Reader, header mail.PartHeader) (string, error) { mediaType, params, err := mime.ParseMediaType(header.Get("Content-Type")) if err != nil { - body, _ := ioutil.ReadAll(reader) + body, readErr := io.ReadAll(reader) + if readErr != nil { + return string(body), fmt.Errorf("fallback read after Content-Type parse error (%v): %w", err, readErr) + } return string(body), nil } @@ -739,7 +742,11 @@ func FetchEmailBodyFromMailbox(account *config.Account, mailbox string, uid uint } cType, _, _ := mime.ParseMediaType(p.Header.Get("Content-Type")) disp, dParams, _ := mime.ParseMediaType(p.Header.Get("Content-Disposition")) - b, _ := ioutil.ReadAll(p.Body) // Auto-decodes quoted-printable/base64 + b, readErr := io.ReadAll(p.Body) // Auto-decodes quoted-printable/base64 + if readErr != nil { + log.Printf("fetcher: reading inner MIME part body: %v", readErr) + continue + } if disp == "attachment" || disp == "inline" || (!strings.HasPrefix(cType, "multipart/") && cType != "text/plain" && cType != "text/html") { fn := dParams["filename"]