emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-28 ae9bfed50d: Fix storing email into nnmail by Gnus


From: Eli Zaretskii
Subject: emacs-28 ae9bfed50d: Fix storing email into nnmail by Gnus
Date: Mon, 19 Dec 2022 12:53:24 -0500 (EST)

branch: emacs-28
commit ae9bfed50dbf5043c0b47f20473ef43d8aeebebd
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Fix storing email into nnmail by Gnus
    
    Backporting suggested by Florian Weimer, since this is
    a denial-of-service issue.
    * lisp/gnus/nnml.el (nnml--encode-headers): Wrap
    'rfc2047-encode-string' calls with 'ignore-errors', to avoid
    disrupting email workflows due to possibly-invalid headers.
    Reported by Florian Weimer <fweimer@redhat.com>.
    
    (cherry picked from commit 23f7c9c2a92e4619b7c4d2286d4249f812cd695d)
---
 lisp/gnus/nnml.el | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index afdb0c780a..258c5efc79 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -775,17 +775,22 @@ article number.  This function is called narrowed to an 
article."
        (nnml--encode-headers headers)
        headers))))
 
+;; RFC2047-encode Subject and From, but leave invalid headers unencoded.
 (defun nnml--encode-headers (headers)
   (let ((subject (mail-header-subject headers))
        (rfc2047-encoding-type 'mime))
     (unless (string-match "\\`[[:ascii:]]*\\'" subject)
-      (setf (mail-header-subject headers)
-           (mail-encode-encoded-word-string subject t))))
+      (let ((encoded-subject
+             (ignore-errors (mail-encode-encoded-word-string subject t))))
+        (if encoded-subject
+            (setf (mail-header-subject headers) encoded-subject)))))
   (let ((from (mail-header-from headers))
        (rfc2047-encoding-type 'address-mime))
     (unless (string-match "\\`[[:ascii:]]*\\'" from)
-      (setf (mail-header-from headers)
-           (rfc2047-encode-string from t)))))
+      (let ((encoded-from
+             (ignore-errors (rfc2047-encode-string from t))))
+        (if encoded-from
+            (setf (mail-header-from headers) encoded-from))))))
 
 (defun nnml-get-nov-buffer (group &optional incrementalp)
   (let ((buffer (gnus-get-buffer-create



reply via email to

[Prev in Thread] Current Thread [Next in Thread]