about summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorRay Ganardi <ray@ganardi.xyz>2020-05-19 13:06:46 +0200
committerDrew DeVault <sir@cmpwn.com>2020-05-25 09:30:20 -0400
commit58db517c8d79c7fd8897d8ab5d5cf9c2de67a071 (patch)
tree775b2d74bda2ea10795b9dffa60afb66c36a90b8 /lib
parent83e7c7661dfe42e75641d764d713d144c2d7c6ce (diff)
downloadaerc-58db517c8d79c7fd8897d8ab5d5cf9c2de67a071.tar.gz
pgp: fail gracefully from email decryption
Aerc panics when there's an error on email decryption.
Instead, an error message should be shown.
Diffstat (limited to 'lib')
-rw-r--r--lib/messageview.go18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/messageview.go b/lib/messageview.go
index 59a1af6..384a947 100644
--- a/lib/messageview.go
+++ b/lib/messageview.go
@@ -59,7 +59,7 @@ type MessageStoreView struct {
 
 func NewMessageStoreView(messageInfo *models.MessageInfo,
 	store *MessageStore, decryptKeys openpgp.PromptFunction,
-	cb func(MessageView)) {
+	cb func(MessageView, error)) {
 
 	msv := &MessageStoreView{messageInfo, store,
 		nil, nil, messageInfo.BodyStructure}
@@ -69,26 +69,30 @@ func NewMessageStoreView(messageInfo *models.MessageInfo,
 			reader := fm.Content.Reader
 			pgpReader, err := pgpmail.Read(reader, Keyring, decryptKeys, nil)
 			if err != nil {
-				panic(err)
+				cb(nil, err)
+				return
 			}
 			msv.message, err = ioutil.ReadAll(pgpReader.MessageDetails.UnverifiedBody)
 			if err != nil {
-				panic(err)
+				cb(nil, err)
+				return
 			}
 			decrypted, err := message.Read(bytes.NewBuffer(msv.message))
 			if err != nil {
-				panic(err)
+				cb(nil, err)
+				return
 			}
 			bs, err := lib.ParseEntityStructure(decrypted)
 			if err != nil {
-				panic(err)
+				cb(nil, err)
+				return
 			}
 			msv.bodyStructure = bs
 			msv.details = pgpReader.MessageDetails
-			cb(msv)
+			cb(msv, nil)
 		})
 	} else {
-		cb(msv)
+		cb(msv, nil)
 	}
 	store.Read([]uint32{messageInfo.Uid}, true, nil)
 }