[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)