all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Kenichi Handa <handa@gnu.org>
To: rms@gnu.org
Cc: 11282@debbugs.gnu.org
Subject: bug#11282: 24.1.50; Error in decoding message
Date: Fri, 04 May 2012 15:33:55 +0900	[thread overview]
Message-ID: <87ehr078vg.fsf@gnu.org> (raw)
In-Reply-To: <E1SKwG9-0004v7-NR@fencepost.gnu.org> (message from Richard Stallman on Thu, 19 Apr 2012 14:39:13 -0400)

In article <E1SKwG9-0004v7-NR@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

> When I visit this as an Rmail file, Rmail gets an error
> decoding the coding system.  Maybe the message really is
> invalid, but Rmail should not get an unhandled Lisp error.

> Here is the backtrace.

>     Debugger entered--Lisp error: (wrong-type-argument wholenump nil)
>       decode-coding-region(888 1351 utf-7)
>       rmail-mime-insert-decoded-text([("text/html" (charset . "utf-7")) ("inline") "7bit" [[nil nil nil] [t nil t]] [#<marker at 1 in bad-message> #<marker at 5343 in bad-message> t] ["" (nil) nil] [#<marker at 5343 in bad-message> #<marker at 5806 in bad-message> t] nil rmail-mime-insert-text nil])
[...]

I've just installed this change to the trunk.  I think it
should also be applied to 24.1.

2012-05-03  Kenichi Handa  <handa@m17n.org>

	* mail/rmailmm.el (rmail-show-mime): Catch an error caused by text
	decoding, and show a warning message without signalling an error
	(Bug#11282).

=== modified file 'lisp/mail/rmailmm.el'
--- lisp/mail/rmailmm.el	2012-01-19 07:21:25 +0000
+++ lisp/mail/rmailmm.el	2012-05-03 05:47:24 +0000
@@ -1300,26 +1300,40 @@
 	(rmail-mime-mbox-buffer rmail-buffer)
 	(rmail-mime-view-buffer rmail-view-buffer)
 	(rmail-mime-coding-system nil))
+    ;; If ENTITY is not a vector, it is a string describing an error.
     (if (vectorp entity)
 	(with-current-buffer rmail-mime-view-buffer
 	  (erase-buffer)
-	  (rmail-mime-insert entity)
-	  (if (consp rmail-mime-coding-system)
-	      ;; Decoding is done by rfc2047-decode-region only for a
-	      ;; header.  But, as the used coding system may have been
-	      ;; overridden by mm-charset-override-alist, we can't
-	      ;; trust (car rmail-mime-coding-system).  So, here we
-	      ;; try the decoding again with mm-charset-override-alist
-	      ;; bound to nil.
-	      (let ((mm-charset-override-alist nil))
-		(setq rmail-mime-coding-system
-		      (rmail-mime-find-header-encoding
-		       (rmail-mime-entity-header entity)))))
-	  (set-buffer-file-coding-system
-	   (if rmail-mime-coding-system
-	       (coding-system-base rmail-mime-coding-system)
-	     'undecided)
-	   t t))
+	  ;; This condition-case is for catching an error in the
+	  ;; internal MIME decoding (e.g. incorrect BASE64 form) that
+	  ;; may be signaled by rmail-mime-insert.
+	  ;; FIXME: The current code doesn't set a proper error symbol
+	  ;; in ERR.  We must find a way to propagate a correct error
+	  ;; symbol that is caused in the very deep code of text
+	  ;; decoding (e.g. an error by base64-decode-region called by
+	  ;; post-read-conversion function of utf-7).
+	  (condition-case err
+	      (progn
+		(rmail-mime-insert entity)
+		(if (consp rmail-mime-coding-system)
+		    ;; Decoding is done by rfc2047-decode-region only for a
+		    ;; header.  But, as the used coding system may have been
+		    ;; overridden by mm-charset-override-alist, we can't
+		    ;; trust (car rmail-mime-coding-system).  So, here we
+		    ;; try the decoding again with mm-charset-override-alist
+		    ;; bound to nil.
+		    (let ((mm-charset-override-alist nil))
+		      (setq rmail-mime-coding-system
+			    (rmail-mime-find-header-encoding
+			     (rmail-mime-entity-header entity)))))
+		(set-buffer-file-coding-system
+		 (if rmail-mime-coding-system
+		     (coding-system-base rmail-mime-coding-system)
+		   'undecided)
+		 t t))
+	    (error (setq entity (format "%s" err))))))
+    ;; Re-check ENTITY.  It may be set to an error string.
+    (when (stringp entity)
       ;; Decoding failed.  ENTITY is an error message.  Insert the
       ;; original message body as is, and show warning.
       (let ((region (with-current-buffer rmail-mime-mbox-buffer






  parent reply	other threads:[~2012-05-04  6:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-19 18:39 bug#11282: 24.1.50; Error in decoding message Richard Stallman
2012-04-20  1:34 ` Kenichi Handa
2012-05-04  6:33 ` Kenichi Handa [this message]
2012-05-04 10:28   ` Chong Yidong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ehr078vg.fsf@gnu.org \
    --to=handa@gnu.org \
    --cc=11282@debbugs.gnu.org \
    --cc=rms@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.