mm-decode: don't touch MIME type for multipart/encrypted children
[gnus] / lisp / mm-decode.el
index 8918434..de2d1ed 100644 (file)
@@ -29,7 +29,6 @@
 
 (require 'mail-parse)
 (require 'mm-bodies)
-(require 'mm-archive)
 (eval-when-compile (require 'cl)
                   (require 'term))
 
 (autoload 'mm-extern-cache-contents "mm-extern")
 (autoload 'mm-insert-inline "mm-view")
 
+(autoload 'mm-archive-decoders "mm-archive")
+(autoload 'mm-archive-dissect-and-inline "mm-archive")
+(autoload 'mm-dissect-archive "mm-archive")
+
 (defvar gnus-current-window-configuration)
 
 (add-hook 'gnus-exit-gnus-hook 'mm-destroy-postponed-undisplay-list)
@@ -278,7 +281,8 @@ before the external MIME handler is invoked."
                     (ignore-errors
                       (if (fboundp 'create-image)
                           (create-image (buffer-string) 'imagemagick 'data-p)
-                        (mm-create-image-xemacs (mm-handle-media-subtype handle))))))
+                        (mm-create-image-xemacs
+                         (mm-handle-media-subtype handle))))))
                (when image
                  (setcar (cdr handle) (list "image/imagemagick"))
                  (mm-image-fit-p handle)))))))
@@ -454,6 +458,7 @@ If not set, `default-directory' will be used."
 (defvar mm-last-shell-command "")
 (defvar mm-content-id-alist nil)
 (defvar mm-postponed-undisplay-list nil)
+(defvar mm-inhibit-auto-detect-attachment nil)
 
 ;; According to RFC2046, in particular, in a digest, the default
 ;; Content-Type value for a body part is changed from "text/plain" to
@@ -573,7 +578,9 @@ Postpone undisplaying of viewers for types in
 (autoload 'message-fetch-field "message")
 
 (defun mm-dissect-buffer (&optional no-strict-mime loose-mime from)
-  "Dissect the current buffer and return a list of MIME handles."
+  "Dissect the current buffer and return a list of MIME handles.
+If NO-STRICT-MIME, don't require the message to have a
+MIME-Version header before proceeding."
   (save-excursion
     (let (ct ctl type subtype cte cd description id result)
       (save-restriction
@@ -662,7 +669,8 @@ Postpone undisplaying of viewers for types in
     ;; Guess what the type of application/octet-stream parts should
     ;; really be.
     (let ((filename (cdr (assq 'filename (cdr cdl)))))
-      (when (and (equal (car ctl) "application/octet-stream")
+      (when (and (not mm-inhibit-auto-detect-attachment)
+                (equal (car ctl) "application/octet-stream")
                 filename
                 (string-match "\\.\\([^.]+\\)$" filename))
        (let ((new-type (mailcap-extension-to-mime (match-string 1 filename))))
@@ -671,7 +679,7 @@ Postpone undisplaying of viewers for types in
     (let ((handle
           (mm-make-handle
            (mm-copy-to-buffer) ctl cte nil cdl description nil id))
-         (decoder (assoc (car ctl) mm-archive-decoders)))
+         (decoder (assoc (car ctl) (mm-archive-decoders))))
       (if (and decoder
               ;; Do automatic decoding
               (cadr decoder)
@@ -688,7 +696,9 @@ Postpone undisplaying of viewers for types in
                (goto-char (point-max))
                (if (re-search-backward close-delimiter nil t)
                    (match-beginning 0)
-                 (point-max)))))
+                 (point-max))))
+        (mm-inhibit-auto-detect-attachment
+         (equal (car ctl) "multipart/encrypted")))
     (setq boundary (concat (regexp-quote boundary) "[ \t]*$"))
     (while (and (< (point) end) (re-search-forward boundary end t))
       (goto-char (match-beginning 0))