diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/email/parser.go | 16 | ||||
| -rw-r--r-- | pkg/email/parser_test.go | 28 |
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, + }}, } |
