fix: return error if parsing header fails GODT-502

This commit is contained in:
James Houlahan
2020-06-19 11:06:43 +02:00
committed by Jakub
parent 7724ca3996
commit 7301e5571c
4 changed files with 16 additions and 4 deletions

View File

@ -2,12 +2,14 @@
Changelog [format](http://keepachangelog.com/en/1.0.0/) 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 ### Changed
* GODT-396 reduce number of EXISTS calls * GODT-396 reduce number of EXISTS calls
* GODT-143 Allow appending to Sent folder when sender matches account address * 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) ## [v1.2.7] Donghai-fix-sync - (beta 2020-05-07 live 2020-04-20)

View File

@ -80,7 +80,7 @@ func TestCreateOrUpdateMessageMetadata(t *testing.T) {
a.Equal(t, []*pmapi.Attachment(nil), msg.Attachments) a.Equal(t, []*pmapi.Attachment(nil), msg.Attachments)
a.Equal(t, int64(-1), msg.Size) a.Equal(t, int64(-1), msg.Size)
a.Equal(t, "", msg.MIMEType) 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. // Change the calculated data.
wantSize := int64(42) wantSize := int64(42)

View File

@ -20,6 +20,7 @@ package pmapi
import ( import (
"fmt" "fmt"
"net/http" "net/http"
"net/mail"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
@ -113,6 +114,7 @@ var (
EventItem: EventItem{ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==", Action: EventCreate}, EventItem: EventItem{ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==", Action: EventCreate},
Created: &Message{ Created: &Message{
ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==", ID: "hdI7aIgUO1hFplCIcJHB0jShRVsAzS0AB75wGCaiNVeIHXLmaUnt4eJ8l7c7L6uk4g0ZdXhGWG5gfh6HHgAZnw==",
Header: make(mail.Header),
Subject: "Hey there", Subject: "Hey there",
}, },
}, },
@ -153,6 +155,7 @@ var (
EventItem: EventItem{ID: "msgID1", Action: EventCreate}, EventItem: EventItem{ID: "msgID1", Action: EventCreate},
Created: &Message{ Created: &Message{
ID: "id", ID: "id",
Header: make(mail.Header),
Subject: "Hey there", Subject: "Hey there",
}, },
}, },
@ -160,6 +163,7 @@ var (
EventItem: EventItem{ID: "msgID2", Action: EventCreate}, EventItem: EventItem{ID: "msgID2", Action: EventCreate},
Created: &Message{ Created: &Message{
ID: "id", ID: "id",
Header: make(mail.Header),
Subject: "Hey there again", Subject: "Hey there again",
}, },
}, },

View File

@ -24,6 +24,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"io" "io"
"net/http" "net/http"
"net/mail" "net/mail"
@ -32,6 +33,7 @@ import (
"strings" "strings"
pmcrypto "github.com/ProtonMail/gopenpgp/crypto" pmcrypto "github.com/ProtonMail/gopenpgp/crypto"
"github.com/sirupsen/logrus"
"golang.org/x/crypto/openpgp/packet" "golang.org/x/crypto/openpgp/packet"
) )
@ -211,9 +213,13 @@ func (m *Message) UnmarshalJSON(b []byte) error {
if raw.Header != "" && raw.Header != "(No Header)" { if raw.Header != "" && raw.Header != "(No Header)" {
msg, err := mail.ReadMessage(strings.NewReader(raw.Header + "\r\n\r\n")) msg, err := mail.ReadMessage(strings.NewReader(raw.Header + "\r\n\r\n"))
if err == nil { if err != nil {
m.Header = msg.Header 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 return nil