Subject: rmail-forward generates wrong-type-argument error
From: Nicolas Graner <[email-masked]>
To: [email-masked]
Date: Thu, 03 Nov 2022 22:49:43 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

In Emacs 29.0.50 master, the command rmail-forward always generates an
error.

To reproduce, open any Rmail file with rmail and type "f".

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  string-match("\\`[^ @]+@[^ @]+\\'" nil nil t)
  message-mail(nil "[[email-masked]: testing]" ((In-Reply-To) ("cc")) nil nil (rmail-yank-current-message #<buffer bug-test>) ((rmail-mark-message #<buffer bug-test> (1) 5)) (rmail-mail-return #<buffer bug-test>))
  compose-mail(nil "[[email-masked]: testing]" ((In-Reply-To) ("cc")) nil nil (rmail-yank-current-message #<buffer bug-test>) ((rmail-mark-message #<buffer bug-test> (1) 5)) (rmail-mail-return #<buffer bug-test>))
  rmail-start-mail(nil nil "[[email-masked]: testing]" nil nil #<buffer bug-test> ((rmail-mark-message #<buffer bug-test> (1) 5)) t)
  rmail-forward(nil)
  funcall-interactively(rmail-forward nil)
  call-interactively(rmail-forward nil nil)
  command-execute(rmail-forward)

Explanation:

In message-mail, code was added to fix incorrect In-Reply-To headers
sent by Firefox. This code assumes that the value of the header is a
string, but in messages generated by rmail-forward, the value of
In-Reply-To is nil.

Suggested patch:

diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 24cba97718..3bbd68bdcd 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -7034,6 +7034,7 @@ message-mail
           ;; Firefox sends us In-Reply-To headers that are Message-IDs
           ;; without <> around them.  Fix that.
           (when (and (eq (car h) 'In-Reply-To)
+                     (stringp (cdr h))
                      ;; Looks like a Message-ID.
                      (string-match-p "\\`[^ @]+@[^ @]+\\'" (cdr h))
                      (not (string-match-p "\\`<.*>\\'" (cdr h))))