Subject: 29.0.50; Cancel error when article has no email in From

From: Adam Sjøgren <[email-masked]>
Date: Tue, 15 Feb 2022 21:09:51 +0100

I pressed C in a summary buffer to cancel an article, and got this
error:

  Debugger entered--Lisp error: (wrong-type-argument char-or-string-p nil)
    message-is-yours-p()
    message-cancel-news()
    gnus-summary-cancel-article(nil nil)
    funcall-interactively(gnus-summary-cancel-article nil nil)
    command-execute(gnus-summary-cancel-article)

The problem is that message-is-yours-p assumes that the From: line
contains an email-address, but in this case it only has a name:

	   ;; Email address in From field equals to our address
	   (and (setq from (message-fetch-field "from"))
		(string-equal
		 (downcase (car (mail-header-parse-address from)))
		 (downcase (car (mail-header-parse-address
				 (message-make-from))))))

The (mail-header-parse-address from) is nil when there is no email:

  (mail-header-parse-address "Andi Duferense") → nil

so the (downcase nil) fails with (wrong-type-argument char-or-string-p
nil).

This fixes the problem for me:

diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 869ab3f82b..faf22ea85f 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -7485,7 +7485,7 @@ message-is-yours-p
 	   ;; Email address in From field equals to our address
 	   (and (setq from (message-fetch-field "from"))
 		(string-equal
-		 (downcase (car (mail-header-parse-address from)))
+		 (downcase (or (car (mail-header-parse-address from)) ""))
 		 (downcase (car (mail-header-parse-address
 				 (message-make-from))))))
 	   ;; Email address in From field matches

There is probably a better way to fix it.

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)
 of 2022-02-14 built on tullinup
Repository revision: 0c53f0db3b7d1a01076cd51dbccd41ec547716d8
Repository branch: master
System Description: Debian GNU/Linux 11 (bullseye)

Configured using:
 'configure --with-pgtk --with-native-compilation'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS WEBP XIM GTK3 ZLIB

Important settings:
  value of $LANG: en_GB.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  gnus-topic-mode: t
  gnus-undo-mode: t
  global-magit-file-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  dumb-jump-mode: t
  shell-dirtrack-mode: t
  which-function-mode: t
  global-auto-complete-mode: t
  save-place-mode: t
  jabber-activity-mode: t
  winner-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t

Load-path shadows:
~/elisp/let-alist/let-alist hides ~/elisp/extra/let-alist
/usr/share/emacs/site-lisp/elpa-src/boxquote-2.2/boxquote hides ~/elisp/extra/boxquote
~/elisp/transient/transient hides /usr/src/emacs/lisp/transient
~/elisp/let-alist/let-alist hides /usr/src/emacs/lisp/emacs-lisp/let-alist

Features:
(shadow emacsbug cl-print debug backtrace find-func bbdb-message
sendmail url-http url-gw url-auth gnus-gravatar gravatar sort smiley
gnus-cite gnus-async gnus-bcklg gnus-dup gnus-ml disp-table cus-start
gnus-topic utf-7 imap rfc2104 epa-file network-stream nsm nnml bbdb-gnus
bbdb-mua nnnil gnus-demon gnus-twit gnus-delay gnus-draft gnus-agent
gnus-srvr gnus-score score-mode nnvirtual nntp gnus-cache nndraft nnmh
mail-extr spam spam-stat bbdb-com gnus-uu yenc gnus-msg gnus-html
url-queue help-fns radix-tree url-cache mm-url bbdb-picture gnus-art
mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo
gnus-fun hashcash gnus-start gnus-dbus gnus-cloud nnimap nnmail
mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win gnus
nnheader range face-remap time gopher shr pixel-fill kinsoku svg litable
magithub magithub-ci magithub-issue magithub-cache magithub-core
magit-submodule magit-obsolete magit-popup magit-blame magit-stash
magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone
magit-remote magit-commit magit-sequence magit-notes magit-worktree
magit-tag magit-merge magit-branch magit-reset magit-files magit-refs
magit-status magit magit-repos magit-apply magit-wip magit-log
magit-diff smerge-mode diff magit-core magit-autorevert autorevert
filenotify magit-margin magit-transient magit-process magit-mode
git-commit recentf tree-widget magit-git magit-section benchmark
magit-utils vc-git diff-mode ido crm log-edit message yank-media rmc
rfc822 mml mml-sec epa epg rfc6068 epg-config gnus-util mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util
ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader
pcvs-util with-editor markdown-mode color noutline outline rg pcase
rg-info-hack rg-menu transient rg-ibuffer ibuf-macs rg-result wgrep-rg
rg-history rg-header ibuf-ext ibuffer ibuffer-loaddefs wgrep grep
compile text-property-search dumb-jump f dash s etags fileloop generator
xref project tramp tramp-loaddefs trampver tramp-integration cus-edit pp
cus-load files-x tramp-compat shell pcomplete parse-time iso8601 ls-lisp
auto-loads tex-site expand-region subword-mode-expansions
cperl-mode-expansions text-mode-expansions html-mode-expansions
er-basic-expansions thingatpt expand-region-core expand-region-custom
which-func cperl-mode auto-complete-config auto-complete edmacro kmacro
popup debian-changelog-mode imenu add-log dpkg-dev-el saveplace vc
vc-dispatcher bbdb bbdb-site timezone bbdb-loaddefs boxquote rect
jabber-last-message-correction jabber-http-file-upload jabber-print-html
jabber-otr jabber jabber-notifications notifications jabber-libnotify
dbus jabber-awesome jabber-osd jabber-wmii jabber-xmessage
jabber-festival jabber-sawfish jabber-ratpoison jabber-tmux
jabber-screen jabber-socks5 jabber-ft-server jabber-si-server
jabber-ft-client jabber-ft-common jabber-si-client jabber-si-common
jabber-feature-neg jabber-truncate jabber-time jabber-autoaway time-date
jabber-vcard-avatars jabber-chatstates jabber-events jabber-vcard
jabber-avatar jabber-activity jabber-watch jabber-modeline easy-mmode
advice jabber-ahc-presence jabber-ahc jabber-version jabber-ourversion
jabber-muc-nick-completion hippie-exp comint ansi-color jabber-browse
jabber-search jabber-register jabber-roster format-spec jabber-presence
jabber-muc jabber-bookmarks jabber-private jabber-muc-nick-coloring
hexrgb jabber-widget jabber-disco wid-edit jabber-chat jabber-history
jabber-chatbuffer jabber-alert jabber-iq jabber-core jabber-console
derived sgml-mode facemenu dom ewoc jabber-keymap jabber-sasl sasl
sasl-anonymous sasl-login sasl-plain fsm jabber-logon jabber-conn srv
dns starttls tls jabber-xml xml jabber-menu jabber-util cl winner ring
gnutls puny comp comp-cstr warnings rx cl-extra help-mode
find-file-from-selection find-lisp dired dired-loaddefs cap-words
superword subword server finder-inf package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util mailcap url-handlers url-parse auth-source cl-seq eieio
eieio-core cl-macs eieio-loaddefs password-cache json map url-vars seq
gv subr-x byte-opt bytecomp byte-compile cconv cl-loaddefs cl-lib
iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget keymap hashtable-print-readable backquote threads
dbusbind inotify dynamic-setting system-font-setting font-render-setting
cairo gtk pgtk lcms2 multi-tty make-network-process native-compile
emacs)

Memory information:
((conses 16 856378 61025)
 (symbols 48 38150 20)
 (strings 32 231006 15196)
 (string-bytes 1 9980301)
 (vectors 16 53919)
 (vector-slots 8 1672621 192833)
 (floats 8 522 138)
 (intervals 56 734 0)
 (buffers 992 27))

-- 
 "Yes, this sled is truly a hazard to life and limb."       Adam Sjøgren
 "WHEEEE! OOMPH! EEEEEEE!"                             [email-masked]