aboutsummaryrefslogtreecommitdiffstats
path: root/lib/parse/header_test.go
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2023-03-11 13:26:58 +0900
committerRobin Jarry <robin@jarry.cc>2023-03-26 21:02:18 +0200
commit94a763920f5ee8b54b8ba7f819be373d80a4805d (patch)
treeccff19f3bb7c35dc02af49f04fe6adfce251498f /lib/parse/header_test.go
parentc09b17a930cc58c13dd5dd2ba8e7a261833eb05a (diff)
downloadaerc-94a763920f5ee8b54b8ba7f819be373d80a4805d.tar.gz
parse msg-id lists more liberally
Some user agents deliberately generate non-standard message identifier lists in In-Reply-To and References headers. Instead of failing silently, aerc now falls back to a desperate parser scavaging whatever looking like <id-left@id-right>. As the more liberal parser being substituted with, References header are now stored for IMAP not only when there's a parsing error. Fixes: 31d2f5be3cec ("message-info: add explicit References field") Signed-off-by: Nguyễn Gia Phong <mcsinyx@disroot.org> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/parse/header_test.go')
-rw-r--r--lib/parse/header_test.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/parse/header_test.go b/lib/parse/header_test.go
new file mode 100644
index 00000000..bc6e3631
--- /dev/null
+++ b/lib/parse/header_test.go
@@ -0,0 +1,42 @@
+package parse_test
+
+import (
+ "testing"
+
+ "git.sr.ht/~rjarry/aerc/lib/parse"
+ "github.com/emersion/go-message/mail"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestMsgIDList(t *testing.T) {
+ tests := []struct {
+ name string
+ input string
+ expected []string
+ }{
+ {
+ name: "valid",
+ input: "<1q@az> (cmt)\r\n <2w@sx> (khld)",
+ expected: []string{"1q@az", "2w@sx"},
+ },
+ {
+ name: "comma",
+ input: "<3e@dc>, <4r@fv>,\t<5t@gb>",
+ expected: []string{"3e@dc", "4r@fv", "5t@gb"},
+ },
+ {
+ name: "other non-CFWS separators",
+ input: "<6y@>, <hn@7u>\n <> <jm@8i>",
+ expected: []string{"hn@7u", "jm@8i"},
+ },
+ }
+
+ for _, test := range tests {
+ var h mail.Header
+ h.Set("References", test.input)
+ t.Run(test.name, func(t *testing.T) {
+ actual := parse.MsgIDList(&h, "References")
+ assert.Equal(t, test.expected, actual)
+ })
+ }
+}