From a2108dded185176bc5ec16c8c0420e8bd2555ecc Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 20 Nov 2023 12:58:24 +0100 Subject: [PATCH] dkim: fix headerPicker.Pick with non-canonical header keys Closes: https://github.com/emersion/go-msgauth/issues/58 --- dkim/header.go | 2 ++ dkim/header_test.go | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/dkim/header.go b/dkim/header.go index 39a2628..14c0729 100644 --- a/dkim/header.go +++ b/dkim/header.go @@ -149,6 +149,8 @@ func newHeaderPicker(h header) *headerPicker { } func (p *headerPicker) Pick(key string) string { + key = strings.ToLower(key) + at := p.picked[key] for i := len(p.h) - 1; i >= 0; i-- { kv := p.h[i] diff --git a/dkim/header_test.go b/dkim/header_test.go index 16379b5..5cc0aaf 100644 --- a/dkim/header_test.go +++ b/dkim/header_test.go @@ -133,7 +133,18 @@ func TestHeaderPicker_Pick(t *testing.T) { t.Errorf("Parameter %s not found in headers %s", k, headers) } } - + }) + t.Run("non-canonical header fields", func(t *testing.T) { + headers := header{ + "Message-ID: asdf", + } + picker := newHeaderPicker(headers) + if v := picker.Pick("Message-Id"); v != headers[0] { + t.Errorf("Pick() = %q, want %q", v, headers[0]) + } + if v := picker.Pick("Message-ID"); v != "" { + t.Errorf("Pick() = %q, want %q", v, "") + } }) }