From: Keith Packard <keithp@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@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 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch