[PATCH] Map missing content-type to "" instead of nil
keithp at keithp.com
keithp at keithp.com
Thu Oct 24 16:08:00 PDT 2019
From: Keith Packard <keithp at keithp.com>
When a message part has no content type, a 'nil' value results in many
failures when passed to functions like 'downcase'. Instead of
crashing, map a nil value to the empty string, "", so that the show
operation doesn't crash.
Signed-off-by: Keith Packard <keithp at keithp.com>
---
emacs/notmuch-show.el | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index e13ca3d7..7e3d0501 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -556,6 +556,10 @@ message at DEPTH in the current thread."
"Alist from raw content ID to (MSG PART).")
(make-variable-buffer-local 'notmuch-show--cids)
+(defun notmuch-show--plist-get(l m)
+ (let ((e (plist-get l m)))
+ (if e e "")))
+
(defun notmuch-show--register-cids (msg part)
"Register content-IDs in PART and all of PART's sub-parts."
(let ((content-id (plist-get part :content-id)))
@@ -570,7 +574,7 @@ message at DEPTH in the current thread."
(push (list content-id msg part) notmuch-show--cids)))
;; Recurse on sub-parts
(let ((ctype (notmuch-split-content-type
- (downcase (plist-get part :content-type)))))
+ (downcase (notmuch-show--plist-get part :content-type)))))
(cond ((equal (first ctype) "multipart")
(mapc (apply-partially #'notmuch-show--register-cids msg)
(plist-get part :content)))
@@ -594,7 +598,7 @@ will return nil if the CID is unknown or cannot be retrieved."
;; reference the same cid: part many times (hundreds!).
(content (notmuch-get-bodypart-binary
msg part notmuch-show-process-crypto 'cache))
- (content-type (plist-get part :content-type)))
+ (content-type (notmuch-show--plist-get part :content-type)))
(list content content-type)))))
(defun notmuch-show-setup-w3m ()
@@ -620,7 +624,7 @@ will return nil if the CID is unknown or cannot be retrieved."
;; MIME part renderers
(defun notmuch-show-multipart/*-to-list (part)
- (mapcar (lambda (inner-part) (plist-get inner-part :content-type))
+ (mapcar (lambda (inner-part) (notmuch-show--plist-get inner-part :content-type))
(plist-get part :content)))
(defun notmuch-show-insert-part-multipart/alternative (msg part content-type nth depth button)
@@ -631,7 +635,7 @@ will return nil if the CID is unknown or cannot be retrieved."
;; but it's not clear that this is the wrong thing to do - which
;; should be chosen if there are more than one that match?
(mapc (lambda (inner-part)
- (let* ((inner-type (plist-get inner-part :content-type))
+ (let* ((inner-type (notmuch-show--plist-get inner-part :content-type))
(hide (not (or notmuch-show-all-multipart/alternative-parts
(string= chosen-type inner-type)))))
(notmuch-show-insert-bodypart msg inner-part depth hide)))
@@ -948,7 +952,7 @@ will return nil if the CID is unknown or cannot be retrieved."
(defun notmuch-show-mime-type (part)
"Return the correct mime-type to use for PART."
- (let ((content-type (downcase (plist-get part :content-type))))
+ (let ((content-type (downcase (notmuch-show--plist-get part :content-type))))
(or (and (string= content-type "application/octet-stream")
(notmuch-show-get-mime-type-of-application/octet-stream part))
(and (string= content-type "inline patch")
@@ -989,7 +993,7 @@ HIDE determines whether to show or hide the part and the button
as follows: If HIDE is nil, show the part and the button. If HIDE
is t, hide the part initially and show the button."
- (let* ((content-type (downcase (plist-get part :content-type)))
+ (let* ((content-type (downcase (notmuch-show--plist-get part :content-type)))
(mime-type (notmuch-show-mime-type part))
(nth (plist-get part :id))
(long (and (notmuch-match-content-type mime-type "text/*")
--
2.24.0.rc0
More information about the notmuch
mailing list