emacs-diffs
[Top][All Lists]
Advanced

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

master 23a887e: Add work-around for nnmaildir encoding problem


From: Lars Ingebrigtsen
Subject: master 23a887e: Add work-around for nnmaildir encoding problem
Date: Thu, 7 Jan 2021 09:14:17 -0500 (EST)

branch: master
commit 23a887e426f81033b0de2f4c93a8525cb31c28da
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add work-around for nnmaildir encoding problem
    
    * lisp/gnus/mm-decode.el (mm-with-part): Fix problem with
    multipart 8bit encoded posts from nnmaildir (bug#44307).
---
 lisp/gnus/mm-decode.el            | 19 ++++++++++++++-----
 test/lisp/gnus/mm-decode-tests.el | 18 +++++++++++++++++-
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index 61946aa..2b0b61b 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -1264,11 +1264,20 @@ in HANDLE."
      (when (and (mm-handle-buffer handle)
                (buffer-name (mm-handle-buffer handle)))
        (with-temp-buffer
-        (mm-disable-multibyte)
-        (insert-buffer-substring (mm-handle-buffer handle))
-        (mm-decode-content-transfer-encoding
-         (mm-handle-encoding handle)
-         (mm-handle-media-type handle))
+        (if (and (eq (mm-handle-encoding handle) '8bit)
+                 (with-current-buffer (mm-handle-buffer handle)
+                   enable-multibyte-characters))
+            ;; Due to unfortunate historical reasons, we may have a
+            ;; multibyte buffer here, but if it's using an 8bit
+            ;; Content-Transfer-Encoding, then work around that by
+            ;; just ignoring the situation.
+            (insert-buffer-substring (mm-handle-buffer handle))
+          ;; Do the decoding.
+          (mm-disable-multibyte)
+          (insert-buffer-substring (mm-handle-buffer handle))
+          (mm-decode-content-transfer-encoding
+           (mm-handle-encoding handle)
+           (mm-handle-media-type handle)))
         ,@forms))))
 (put 'mm-with-part 'lisp-indent-function 1)
 (put 'mm-with-part 'edebug-form-spec '(body))
diff --git a/test/lisp/gnus/mm-decode-tests.el 
b/test/lisp/gnus/mm-decode-tests.el
index 976e726..74591f9 100644
--- a/test/lisp/gnus/mm-decode-tests.el
+++ b/test/lisp/gnus/mm-decode-tests.el
@@ -54,7 +54,7 @@
                                                          'charset)))
                          "<!doctype html><html><head><meta 
http-equiv=\"content-type\" content=\"text/html; 
charset=UTF-8\"></head><body>ääää</body></html>\n")))))))
 
-(ert-deftest test-mm-with-part ()
+(ert-deftest test-mm-with-part-unibyte ()
   (with-temp-buffer
     (set-buffer-multibyte nil)
     (insert-file-contents-literally (ert-resource-file "8bit-multipart.bin"))
@@ -70,4 +70,20 @@
                                                        'charset)))
                        "ääää\n"))))))
 
+(ert-deftest test-mm-with-part-multibyte ()
+  (with-temp-buffer
+    (set-buffer-multibyte t)
+    (nnheader-insert-file-contents (ert-resource-file "8bit-multipart.bin"))
+    (while (search-forward "\r\n" nil t)
+      (replace-match "\n"))
+    (let ((handle (mm-dissect-buffer)))
+      (pop handle)
+      (let ((part (pop handle)))
+        (should (equal (decode-coding-string
+                        (mm-with-part part
+                          (buffer-string))
+                        (intern (mail-content-type-get (mm-handle-type part)
+                                                       'charset)))
+                       "ääää\n"))))))
+
 ;;; mm-decode-tests.el ends here



reply via email to

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