Fix infloop in rmailmm on multipart messages with epilogues
authorGlenn Morris <rgm@gnu.org>
Sun, 7 Oct 2012 07:49:16 +0000 (00:49 -0700)
committerGlenn Morris <rgm@gnu.org>
Sun, 7 Oct 2012 07:49:16 +0000 (00:49 -0700)
* lisp/mail/rmailmm.el (rmail-mime-process-multipart):
Do not confuse a multipart message with an epilogue
with a "truncated" one; fixes 2011-06-27 change.

Fixes: debbugs:10101

lisp/ChangeLog
lisp/mail/rmailmm.el

index d138e6c..e54e822 100644 (file)
@@ -1,3 +1,9 @@
+2012-10-07  Glenn Morris  <rgm@gnu.org>
+
+       * mail/rmailmm.el (rmail-mime-process-multipart):
+       Do not confuse a multipart message with an epilogue
+       with a "truncated" one; fixes 2011-06-27 change.  (Bug#10101)
+
 2012-10-07  Fabián Ezequiel Gallina  <fgallina@cuca>
 
        Fix shell output retrieval and comint-prompt-regexp init.
index 2cc5796..11bccd5 100644 (file)
@@ -832,7 +832,7 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
   (let ((boundary (cdr (assq 'boundary content-type)))
        (subtype (cadr (split-string (car content-type) "/")))
        (index 0)
-       beg end next entities truncated)
+       beg end next entities truncated last)
     (unless boundary
       (rmail-mm-get-boundary-error-message
        "No boundary defined" content-type content-disposition
@@ -867,7 +867,13 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
               ;; Handle the rest of the truncated message
               ;; (if it isn't empty) by pretending that the boundary
               ;; appears at the end of the message.
-              (and (save-excursion
+              ;; We use `last' to distinguish this from the more
+              ;; likely situation of there being an epilogue
+              ;; after the last boundary, which should be ignored.
+              ;; See rmailmm-test-multipart-handler for an example,
+              ;; and also bug#10101.
+              (and (not last)
+                   (save-excursion
                      (skip-chars-forward "\n")
                      (> (point-max) (point)))
                    (setq truncated t end (point-max))))
@@ -875,7 +881,8 @@ The other arguments are the same as `rmail-mime-multipart-handler'."
       ;; epilogue, else hide the boundary only.  Use a marker for
       ;; `next' because `rmail-mime-show' may change the buffer.
       (cond ((looking-at "--[ \t]*$")
-            (setq next (point-max-marker)))
+            (setq next (point-max-marker)
+                  last t))
            ((looking-at "[ \t]*\n")
             (setq next (copy-marker (match-end 0) t)))
            (truncated