bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#7746: SERIOUS BUG: mail-strip-quoted-names bug causing unrmail to lo


From: Stefan Monnier
Subject: bug#7746: SERIOUS BUG: mail-strip-quoted-names bug causing unrmail to lose mail
Date: Sat, 01 Jan 2011 22:21:18 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

close 7746
thanks

> This code erases the buffer " *temp*" even if it is being used by
> another piece of code!  This is particularly bad because this is the
> first buffer used by with-temp-buffer.

Indeed, that's wrong, thanks for spotting it.  I've installed your
suggested patch (see below) into the emacs-23 branch (for Emacs-23.3).

BTW, I'm wondering why the code handles nesting in this way.  Can you
try the second patch below (you may need to hand-apply it since it's
based on the new code I just installed), to confirm that it works just
as well?


        Stefan


--- lisp/mail/mail-utils.el     2010-10-09 00:41:03 +0000
+++ lisp/mail/mail-utils.el     2011-01-02 03:03:38 +0000
@@ -189,8 +189,7 @@
        ;; Detect nested comments.
        (if (string-match "[ \t]*(\\([^)\\]\\|\\\\.\\|\\\\\n\\)*(" address)
           ;; Strip nested comments.
-          (with-current-buffer (get-buffer-create " *temp*")
-            (erase-buffer)
+          (with-temp-buffer
             (insert address)
             (set-syntax-table lisp-mode-syntax-table)
             (goto-char 1)
@@ -203,8 +202,7 @@
                                    (forward-sexp 1)
                                  (error (goto-char (point-max))))
                                  (point))))
-            (setq address (buffer-string))
-            (erase-buffer))
+            (setq address (buffer-string)))
         ;; Strip non-nested comments an easier way.
         (while (setq pos (string-match
                            ;; This doesn't hack rfc822 nested comments


Second patch to simplify the code:

                            
=== modified file 'lisp/mail/mail-utils.el'
--- lisp/mail/mail-utils.el     2011-01-02 03:16:03 +0000
+++ lisp/mail/mail-utils.el     2011-01-02 03:19:53 +0000
@@ -186,30 +186,13 @@
               (mapconcat 'identity (rfc822-addresses address) ", "))
       (let (pos)
 
-       ;; Detect nested comments.
-       (if (string-match "[ \t]*(\\([^)\\]\\|\\\\.\\|\\\\\n\\)*(" address)
-          ;; Strip nested comments.
-          (with-temp-buffer
-            (insert address)
-            (set-syntax-table lisp-mode-syntax-table)
-            (goto-char 1)
-            (while (search-forward "(" nil t)
-              (forward-char -1)
-              (skip-chars-backward " \t")
-              (delete-region (point)
-                             (save-excursion
-                               (condition-case ()
-                                   (forward-sexp 1)
-                                 (error (goto-char (point-max))))
-                                 (point))))
-            (setq address (buffer-string)))
-        ;; Strip non-nested comments an easier way.
+        ;; Strip comments.
         (while (setq pos (string-match
                            ;; This doesn't hack rfc822 nested comments
                            ;;  `(xyzzy (foo) whinge)' properly.  Big deal.
-                           "[ \t]*(\\([^)\\]\\|\\\\.\\|\\\\\n\\)*)"
+                          "[ \t]*(\\([^()\\]\\|\\\\.\\|\\\\\n\\)*)"
                            address))
-          (setq address (replace-match "" nil nil address 0))))
+          (setq address (replace-match "" nil nil address 0)))
 
        ;; strip surrounding whitespace
        (string-match "\\`[ \t\n]*" address)






reply via email to

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