diff options
Diffstat (limited to 'pkg/email')
| -rw-r--r-- | pkg/email/lore/parse.go | 5 | ||||
| -rw-r--r-- | pkg/email/lore/parse_test.go | 44 | ||||
| -rw-r--r-- | pkg/email/lore/read.go | 2 |
3 files changed, 40 insertions, 11 deletions
diff --git a/pkg/email/lore/parse.go b/pkg/email/lore/parse.go index d71e2a362..3b044bf21 100644 --- a/pkg/email/lore/parse.go +++ b/pkg/email/lore/parse.go @@ -93,6 +93,11 @@ func PatchSeries(emails []*Email) []*Series { // The cover email is not of interest. continue } + if !email.HasPatch { + // Sometimes users reply to the series keeping the original subject. + // Ignore such messages. + continue + } if hasSeq[seq] { // It's weird if that really happens, but let's skip for now. continue diff --git a/pkg/email/lore/parse_test.go b/pkg/email/lore/parse_test.go index 743ffc976..196f9c486 100644 --- a/pkg/email/lore/parse_test.go +++ b/pkg/email/lore/parse_test.go @@ -13,6 +13,7 @@ import ( "github.com/google/syzkaller/dashboard/dashapi" "github.com/google/syzkaller/pkg/email" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestThreadsCollection(t *testing.T) { @@ -381,6 +382,17 @@ func TestDiscussionType(t *testing.T) { } } +const dummyPatch = `diff --git a/kernel/kcov.c b/kernel/kcov.c +index 85e5546cd791..949ea4574412 100644 +--- a/kernel/kcov.c ++++ b/kernel/kcov.c +@@ -127,7 +127,6 @@ void kcov_task_exit(struct task_struct *t) + if (kcov == NULL) + return; +- spin_lock(&kcov->lock); + if (WARN_ON(kcov->t != t)) { +` + func TestParseSeries(t *testing.T) { messages := []string{ // A simple patch series. @@ -390,8 +402,7 @@ Message-ID: <First> From: UserA <a@user.com> Content-Type: text/plain - -Some text`, +` + dummyPatch, // A series with a cover. `Date: Sun, 7 May 2017 19:55:00 -0700 Subject: [PATCH net v2 00/02] A longer series @@ -409,8 +420,7 @@ To: UserA <a@user.com>, UserB <b@user.com> Content-Type: text/plain In-Reply-To: <Second> - -Patch 1/2`, +` + dummyPatch, `Date: Sun, 7 May 2017 19:56:00 -0700 Subject: [PATCH net v2 02/02] Second patch Message-ID: <Second-2> @@ -419,16 +429,24 @@ To: UserA <a@user.com>, UserB <b@user.com> Content-Type: text/plain In-Reply-To: <Second> - -Patch 2/2`, - // Missing patches. +` + dummyPatch, + // Some missing patches. `Date: Sun, 7 May 2017 19:57:00 -0700 Subject: [PATCH 01/03] Series Message-ID: <Third> From: Someone <a@b.com> Content-Type: text/plain -Bug report`, +` + dummyPatch, + // Reply with a patch subject. + `Date: Sun, 7 May 2017 19:57:00 -0700 +Subject: [PATCH] Series +Message-ID: <Fourth> +From: Someone <a@b.com> +Content-Type: text/plain +In-Reply-To: <Something> + +No patch, just text`, } var emails []*Email @@ -441,7 +459,7 @@ Bug report`, } series := PatchSeries(emails) - assert.Len(t, series, 3) + assert.Len(t, series, 4) expectPerID := map[string]*Series{ "<First>": { @@ -480,6 +498,12 @@ Bug report`, }, }, }, + "<Fourth>": { + Subject: "Series", + Version: 1, + Corrupted: "the subject mentions 1 patches, 0 are found", + Patches: nil, + }, } for _, s := range series { expect := expectPerID[s.MessageID] @@ -491,7 +515,7 @@ Bug report`, assert.Equal(t, expect.Corrupted, s.Corrupted, "corrupted differs") assert.Equal(t, expect.Subject, s.Subject, "subject differs") assert.Equal(t, expect.Version, s.Version, "version differs") - assert.Len(t, s.Patches, len(expect.Patches), "patch count differs") + require.Len(t, s.Patches, len(expect.Patches), "patch count differs") for i, expectPatch := range expect.Patches { got := s.Patches[i] assert.Equal(t, expectPatch.Seq, got.Seq, "seq differs") diff --git a/pkg/email/lore/read.go b/pkg/email/lore/read.go index 90a462d9a..133061a28 100644 --- a/pkg/email/lore/read.go +++ b/pkg/email/lore/read.go @@ -54,7 +54,7 @@ func emailFromRaw(body []byte, emails, domains []string) (*Email, error) { if err != nil { return nil, err } - ret := &Email{Email: msg} + ret := &Email{Email: msg, HasPatch: msg.Patch != ""} // Keep memory consumption low. ret.Body = "" ret.Patch = "" |
