aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/email/parser.go16
-rw-r--r--pkg/email/parser_test.go28
2 files changed, 43 insertions, 1 deletions
diff --git a/pkg/email/parser.go b/pkg/email/parser.go
index 795cc6fed..77b063055 100644
--- a/pkg/email/parser.go
+++ b/pkg/email/parser.go
@@ -169,7 +169,7 @@ func Parse(r io.Reader, ownEmails, goodLists, domains []string) (*Email, error)
email := &Email{
BugIDs: dedupBugIDs(bugIDs),
MessageID: msg.Header.Get("Message-ID"),
- InReplyTo: msg.Header.Get("In-Reply-To"),
+ InReplyTo: extractInReplyTo(msg.Header),
Date: date,
Link: link,
Author: author,
@@ -417,6 +417,20 @@ func parseBody(r io.Reader, headers mail.Header) ([]byte, [][]byte, error) {
}
}
+var extractMessageIDs = regexp.MustCompile(`<.+?>`)
+
+func extractInReplyTo(header mail.Header) string {
+ value := header.Get("In-Reply-To")
+ // Normally there should be just one message, to which we reply.
+ // However, there have been some cases when multiple addresses were mentioned.
+ // For now let's just take the first one.
+ ret := extractMessageIDs.FindStringSubmatch(value)
+ if ret != nil {
+ return ret[0]
+ }
+ return ""
+}
+
func extractBodyBugIDs(body string, ownEmailMap map[string]bool, domains []string) []string {
// Let's build a regular expression.
var rb strings.Builder
diff --git a/pkg/email/parser_test.go b/pkg/email/parser_test.go
index 151d259b8..81a532648 100644
--- a/pkg/email/parser_test.go
+++ b/pkg/email/parser_test.go
@@ -910,4 +910,32 @@ Reported-by: syzbot <foo+223c7461c58c58a4cb10@bar.com>
`,
Command: CmdNone,
}},
+ {`Sender: syzkaller-bugs@googlegroups.com
+Subject: Some discussion
+To: <someone@foo.com>
+From: bar <bar@foo.com>
+Message-ID: <1250334f-7220-2bff-5d87-b87573758d81@bar.com>
+Date: Sun, 7 May 2017 19:54:00 -0700
+MIME-Version: 1.0
+Content-Type: text/plain; charset="UTF-8"
+Content-Language: en-US
+Content-Transfer-Encoding: quoted-printable
+In-Reply-To: <000000000000f1a9d205f909f327@google.com>
+ <000000000000ee3a3005f909f30a@google.com>
+Precedence: bulk
+List-ID: <linux-kernel.vger.kernel.org>
+X-Mailing-List: linux-kernel@vger.kernel.org
+
+Some text
+`, Email{
+ MessageID: "<1250334f-7220-2bff-5d87-b87573758d81@bar.com>",
+ // The first one should be picked up.
+ InReplyTo: "<000000000000f1a9d205f909f327@google.com>",
+ Date: time.Date(2017, time.May, 7, 19, 54, 0, 0, parseTestZone),
+ Subject: "Some discussion",
+ Author: "bar@foo.com",
+ Cc: []string{"bar@foo.com", "someone@foo.com"},
+ Body: "Some text\n",
+ Command: CmdNone,
+ }},
}