From c6561d32a8430f99bb84224ba8fde3ddcd44257e Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Wed, 5 Oct 2022 22:50:40 +0200 Subject: [PATCH] forward,recall: fix charsets in part attachment Fix charset to UTF-8 in part attachments. The forward and recall commands fetch message parts with the go-message package which decodes to UTF-8. Hence, we should set the charset of the part attachment to utf-8 and not just copying over the one from the original message. Reported-by: Bence Ferdinandy Signed-off-by: Koni Marti Acked-by: Robin Jarry --- commands/msg/forward.go | 5 +++-- commands/msg/recall.go | 5 +++-- lib/attachment.go | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/commands/msg/forward.go b/commands/msg/forward.go index a345929..6f59a1b 100644 --- a/commands/msg/forward.go +++ b/commands/msg/forward.go @@ -198,12 +198,13 @@ func (forward) Execute(aerc *widgets.Aerc, args []string) error { } store.FetchBodyPart(msg.Uid, p, func(reader io.Reader) { mime := fmt.Sprintf("%s/%s", bs.MIMEType, bs.MIMESubType) - name, ok := bs.Params["name"] + params := lib.SetUtf8Charset(bs.Params) + name, ok := params["name"] if !ok { name = fmt.Sprintf("%s_%s_%d", bs.MIMEType, bs.MIMESubType, rand.Uint64()) } mu.Lock() - composer.AddPartAttachment(name, mime, bs.Params, reader) + composer.AddPartAttachment(name, mime, params, reader) mu.Unlock() }) } diff --git a/commands/msg/recall.go b/commands/msg/recall.go index 4ef505e..52d4ee8 100644 --- a/commands/msg/recall.go +++ b/commands/msg/recall.go @@ -204,12 +204,13 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error { } msg.FetchBodyPart(p, func(reader io.Reader) { mime := fmt.Sprintf("%s/%s", bs.MIMEType, bs.MIMESubType) - name, ok := bs.Params["name"] + params := lib.SetUtf8Charset(bs.Params) + name, ok := params["name"] if !ok { name = fmt.Sprintf("%s_%s_%d", bs.MIMEType, bs.MIMESubType, rand.Uint64()) } mu.Lock() - composer.AddPartAttachment(name, mime, bs.Params, reader) + composer.AddPartAttachment(name, mime, params, reader) mu.Unlock() }) } diff --git a/lib/attachment.go b/lib/attachment.go index d7cbf3f..9246315 100644 --- a/lib/attachment.go +++ b/lib/attachment.go @@ -7,7 +7,9 @@ import ( "net/http" "os" "path/filepath" + "strings" + "git.sr.ht/~rjarry/aerc/logging" "github.com/emersion/go-message/mail" "github.com/pkg/errors" ) @@ -134,3 +136,18 @@ func (pa *PartAttachment) WriteTo(w *mail.Writer) error { } return nil } + +// SetUtf8Charset sets the charset in a params map to UTF-8. +func SetUtf8Charset(origParams map[string]string) map[string]string { + params := make(map[string]string) + for k, v := range origParams { + switch strings.ToLower(k) { + case "charset": + logging.Infof("substitute charset %s with utf-8", v) + params[k] = "utf-8" + default: + params[k] = v + } + } + return params +}