changeset 112073:24ab54013884

Fix error handling of MIME parsing.
author Kenichi Handa <handa@m17n.org>
date Fri, 24 Dec 2010 23:00:14 +0900
parents 60c81b6836dc
children 2e862f6c73d6
files lisp/ChangeLog lisp/mail/rmailmm.el
diffstat 2 files changed, 19 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Dec 24 22:36:24 2010 +0900
+++ b/lisp/ChangeLog	Fri Dec 24 23:00:14 2010 +0900
@@ -1,3 +1,11 @@
+2010-12-24  Kenichi Handa  <handa@m17n.org>
+
+	* mail/rmailmm.el (rmail-mime-parse): Perform parsing in
+	condition-case and return an error message string if something
+	goes wrong.
+	(rmail-show-mime): Adjusted for the above change.  Insert the
+	header by rmail-mime-insert-header.
+
 2010-12-24  Kenichi Handa  <handa@m17n.org>
 
 	* mail/rmailmm.el: New key bindings for rmail-mime-next-item,
--- a/lisp/mail/rmailmm.el	Fri Dec 24 22:36:24 2010 +0900
+++ b/lisp/mail/rmailmm.el	Fri Dec 24 23:00:14 2010 +0900
@@ -1130,11 +1130,12 @@
 
 (defun rmail-mime-parse ()
   "Parse the current Rmail message as a MIME message.
-The value is a MIME-entiy object (see `rmail-mime-entity')."
+The value is a MIME-entiy object (see `rmail-mime-entity').
+If an error occurs, return an error message string."
   (let ((rmail-mime-mbox-buffer (if (rmail-buffers-swapped-p)
 				    rmail-view-buffer
 				  (current-buffer))))
-    ;;(condition-case err
+    (condition-case err
 	(with-current-buffer rmail-mime-mbox-buffer
 	  (save-excursion
 	    (goto-char (point-min))
@@ -1148,8 +1149,7 @@
 		  (aset new 1 (aset (rmail-mime-entity-tagline entity) 2 nil))
 		(aset new 1 (aset (rmail-mime-entity-tagline entity) 2 t)))
 	      entity)))
-	;;(error (error (format "%s" err))))
-    ))
+      (error (format "%s" err)))))
 
 (defun rmail-mime-insert (entity)
   "Insert a MIME-entity ENTITY in the current buffer.
@@ -1251,25 +1251,27 @@
 	(rmail-mime-mbox-buffer rmail-buffer)
 	(rmail-mime-view-buffer rmail-view-buffer)
 	(rmail-mime-coding-system nil))
-    (if entity
+    (if (vectorp entity)
 	(with-current-buffer rmail-mime-view-buffer
 	  (erase-buffer)
 	  (rmail-mime-insert entity)
 	  (if rmail-mime-coding-system
 	      (set-buffer-file-coding-system rmail-mime-coding-system t t)))
-      ;; Decoding failed.  Insert the original message body as is.
+      ;; 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
 		      (goto-char (point-min))
 		      (re-search-forward "^$" nil t)
 		      (forward-line 1)
-		      (cons (point) (point-max)))))
+		      (vector (point-min) (point) (point-max)))))
 	(with-current-buffer rmail-mime-view-buffer
 	  (let ((inhibit-read-only t))
 	    (erase-buffer)
+	    (rmail-mime-insert-header region)
 	    (insert-buffer-substring rmail-mime-mbox-buffer
-				     (car region) (cdr region))))
+				     (aref region 1) (aref region 2))))
 	(set-buffer-file-coding-system 'no-conversion t t)
-	(message "MIME decoding failed")))))
+	(message "MIME decoding failed: %s" entity)))))
 
 (setq rmail-show-mime-function 'rmail-show-mime)