summaryrefslogtreecommitdiff
path: root/worker/maildir
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2022-01-20 01:10:08 +0700
committerRobin Jarry <robin@jarry.cc>2022-01-19 20:18:00 +0100
commit904ffacb0e521218ba1f41e2e5c26d9ac41c9969 (patch)
tree4bb0dbe000b1241586f7fb0635ee076f70c22fe2 /worker/maildir
parentbeae17a6da37402d1c69dc76b476f55cbae982b8 (diff)
downloadaerc-904ffacb0e521218ba1f41e2e5c26d9ac41c9969.zip
maildir,notmuch: avoid leaking open files
Previously, Message.NewReader returned the wrapped buffered reader without a reference to the opened file, so the files descriptors were left unclosed after reading. Now, the file reader is returned directly and closed on the call site. Buffering is not needed here because it is an implementation detail of go-message. Fixes: https://todo.sr.ht/~rjarry/aerc/9
Diffstat (limited to 'worker/maildir')
-rw-r--r--worker/maildir/message.go9
-rw-r--r--worker/maildir/search.go1
-rw-r--r--worker/maildir/worker.go1
3 files changed, 4 insertions, 7 deletions
diff --git a/worker/maildir/message.go b/worker/maildir/message.go
index dbc9ade..b73e083 100644
--- a/worker/maildir/message.go
+++ b/worker/maildir/message.go
@@ -1,7 +1,6 @@
package maildir
import (
- "bufio"
"fmt"
"io"
@@ -20,12 +19,8 @@ type Message struct {
}
// NewReader reads a message into memory and returns an io.Reader for it.
-func (m Message) NewReader() (io.Reader, error) {
- f, err := m.dir.Open(m.key)
- if err != nil {
- return nil, err
- }
- return bufio.NewReader(f), nil
+func (m Message) NewReader() (io.ReadCloser, error) {
+ return m.dir.Open(m.key)
}
// Flags fetches the set of flags currently applied to the message.
diff --git a/worker/maildir/search.go b/worker/maildir/search.go
index edfb8d8..7f97fb1 100644
--- a/worker/maildir/search.go
+++ b/worker/maildir/search.go
@@ -159,6 +159,7 @@ func (w *Worker) searchKey(key uint32, criteria *searchCriteria,
if err != nil {
return false, err
}
+ defer reader.Close()
bytes, err := ioutil.ReadAll(reader)
if err != nil {
return false, err
diff --git a/worker/maildir/worker.go b/worker/maildir/worker.go
index 621b19e..a671d73 100644
--- a/worker/maildir/worker.go
+++ b/worker/maildir/worker.go
@@ -432,6 +432,7 @@ func (w *Worker) handleFetchFullMessages(msg *types.FetchFullMessages) error {
w.worker.Logger.Printf("could not get message reader: %v", err)
return err
}
+ defer r.Close()
w.worker.PostMessage(&types.FullMessage{
Message: types.RespondTo(msg),
Content: &models.FullMessage{