From 7301e5571c0ff10fbf972abe38a88eaaa22abacb Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Fri, 19 Jun 2020 11:06:43 +0200 Subject: [PATCH] fix: return error if parsing header fails GODT-502 --- Changelog.md | 4 +++- internal/store/user_message_test.go | 2 +- pkg/pmapi/events_test.go | 4 ++++ pkg/pmapi/messages.go | 10 ++++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index a952f2c1..21946dc7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,12 +2,14 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/) -## [v1.2.8] Donghai-fix-append (2020-05-XXX) +## [v1.2.8] Donghai-fix-append (2020-06-XXX) ### Changed * GODT-396 reduce number of EXISTS calls * GODT-143 Allow appending to Sent folder when sender matches account address +### Fixed +* Do not crash when `nil` message header is parsed, it fails instead. ## [v1.2.7] Donghai-fix-sync - (beta 2020-05-07 live 2020-04-20) diff --git a/internal/store/user_message_test.go b/internal/store/user_message_test.go index 55bd760b..4e28ca29 100644 --- a/internal/store/user_message_test.go +++ b/internal/store/user_message_test.go @@ -80,7 +80,7 @@ func TestCreateOrUpdateMessageMetadata(t *testing.T) { a.Equal(t, []*pmapi.Attachment(nil), msg.Attachments) a.Equal(t, int64(-1), msg.Size) a.Equal(t, "", msg.MIMEType) - a.Equal(t, mail.Header(nil), msg.Header) + a.Equal(t, make(mail.Header), msg.Header) // Change the calculated data. wantSize := int64(42) diff --git a/pkg/pmapi/events_test.go b/pkg/pmapi/events_test.go index 2ee47421..68a6272e 100644 --- a/pkg/pmapi/events_test.go +++ b/pkg/pmapi/events_test.go @@ -20,6 +20,7 @@ package pmapi import ( "fmt" "net/http" + "net/mail" "regexp" "strconv" "strings" @@ -113,6 +114,7 @@ var ( EventItem: EventItem{ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==", Action: EventCreate}, Created: &Message{ ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==", + Header: make(mail.Header), Subject: "Hey there", }, }, @@ -153,6 +155,7 @@ var ( EventItem: EventItem{ID: "msgID1", Action: EventCreate}, Created: &Message{ ID: "id", + Header: make(mail.Header), Subject: "Hey there", }, }, @@ -160,6 +163,7 @@ var ( EventItem: EventItem{ID: "msgID2", Action: EventCreate}, Created: &Message{ ID: "id", + Header: make(mail.Header), Subject: "Hey there again", }, }, diff --git a/pkg/pmapi/messages.go b/pkg/pmapi/messages.go index 5a74888f..3dc034be 100644 --- a/pkg/pmapi/messages.go +++ b/pkg/pmapi/messages.go @@ -24,6 +24,7 @@ import ( "encoding/base64" "encoding/json" "errors" + "fmt" "io" "net/http" "net/mail" @@ -32,6 +33,7 @@ import ( "strings" pmcrypto "github.com/ProtonMail/gopenpgp/crypto" + "github.com/sirupsen/logrus" "golang.org/x/crypto/openpgp/packet" ) @@ -211,9 +213,13 @@ func (m *Message) UnmarshalJSON(b []byte) error { if raw.Header != "" && raw.Header != "(No Header)" { msg, err := mail.ReadMessage(strings.NewReader(raw.Header + "\r\n\r\n")) - if err == nil { - m.Header = msg.Header + if err != nil { + logrus.WithField("rawHeader", raw.Header).Trace("Failed to parse header") + return fmt.Errorf("failed to parse header of message %v: %v", m.ID, err.Error()) } + m.Header = msg.Header + } else { + m.Header = make(mail.Header) } return nil