Subject: Re: bug#17462: 24.3.50; bbdb-split: Invalid regexp: "Unmatched [ or [^"

From: Sebastien Vauban <[email-masked]>
Date: Mon, 12 May 2014 10:07:15 +0200

Eli Zaretskii wrote:
>> From: Sebastien Vauban <[email-masked]>
>> Date: Sun, 11 May 2014 09:18:00 +0200
>> 
>> Reading emails within Gnus works for years too, though today I have
>> apparently received an email that blocks the access to my "family-new"
>> folder.
>> 
>> See http://screencast.com/t/0xCWvhVjj.
>> 
>> The net impact is that I can't open that "family-new" folder anymore...
>> [...]
>> Recent messages:
>> Generating summary...
>> bbdb-split: Invalid regexp: "Unmatched [ or [^"
>  ^^^^^^^^^^
> bbdb-split is not part of Emacs, so why do you think this is an Emacs
> problem?

I oversaw the fact BBDB wasn't in Emacs, sorry.

> In any case, a Lisp backtrace would be nice.

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (invalid-regexp "Unmatched [ or [^")
  string-match("Name of sender <[email-masked]>, \"Name of receiver [\" <[email-masked]>" " 	\n")
  bbdb-split("Name of sender <[email-masked]>, \"Name of receiver [\" <[email-masked]>" ",")
  (length (bbdb-split to ","))
  (let ((len (length (bbdb-split to ",")))) (cond ((= len 1) "»") (t "T")))
  (cond ((and (string-match gnus-ignored-from-addresses to) (fboundp (quote bbdb-split))) (let ((len (length (bbdb-split to ",")))) (cond ((= len 1) "»") (t "T")))) ((and (string-match gnus-ignored-from-addresses (concat to ", " cc)) (fboundp (quote bbdb-split))) (if (< (length (bbdb-split (concat to ", " cc) ",")) 5) "C" "*")) (t " "))
  (let* ((to (or (cdr (assoc (quote To) (aref header 9))) "")) (cc (or (cdr (assoc (quote Cc) (aref header 9))) ""))) (cond ((and (string-match gnus-ignored-from-addresses to) (fboundp (quote bbdb-split))) (let ((len (length (bbdb-split to ",")))) (cond ((= len 1) "»") (t "T")))) ((and (string-match gnus-ignored-from-addresses (concat to ", " cc)) (fboundp (quote bbdb-split))) (if (< (length (bbdb-split (concat to ", " cc) ",")) 5) "C" "*")) (t " ")))
  gnus-user-format-function-r(...)
  (format "%-15s %s " (let* ((val (eval (let ((val ...)) (if (> ... 15) (if ... ... ...) val)))) (need (- 15 (string-width val)))) (if (> need 0) (concat nil val (make-string need 32)) val)) (gnus-user-format-function-r gnus-tmp-header))
  (insert (format "%-15s %s " (let* ((val (eval (let (...) (if ... ... val)))) (need (- 15 (string-width val)))) (if (> need 0) (concat nil val (make-string need 32)) val)) (gnus-user-format-function-r gnus-tmp-header)))
  (let (gnus-position) (gnus-add-text-properties (point) (progn (insert gnus-tmp-unread) (point)) (cons (quote face) (cons (list (quote leuven-gnus-linum) (quote default)) (quote (gnus-face t))))) (gnus-add-text-properties (point) (progn (insert gnus-tmp-replied) (point)) (cons (quote face) (cons (list (quote leuven-gnus-org-date) (quote default)) (quote (gnus-face t))))) (gnus-add-text-properties (point) (progn (insert gnus-tmp-score-char) (point)) (cons (quote face) (cons (list (quote leuven-gnus-score) (quote default)) (quote (gnus-face t))))) (insert " ") (gnus-add-text-properties (point) (progn (insert (format "%20s " (gnus-user-date (aref gnus-tmp-header 3)))) (point)) (cons (quote face) (cons (list (quote leuven-gnus-org-date) (quote default)) (quote (gnus-face t))))) (insert " ") (gnus-add-text-properties (point) (progn (insert (format " %4s " (gnus-summary-line-message-size gnus-tmp-header))) (point)) (cons (quote face) (cons (list (quote leuven-gnus-diredp-file-suffix) (quote default)) (quote (gnus-face t))))) (setq gnus-position (point)) (insert (format "%-15s %s " (let* ((val (eval (let ... ...))) (need (- 15 (string-width val)))) (if (> need 0) (concat nil val (make-string need 32)) val)) (gnus-user-format-function-r gnus-tmp-header))) (gnus-add-text-properties (point) (progn (insert " ") (point)) (cons (quote face) (cons (list (quote leuven-gnus-linum) (quote default)) (quote (gnus-face t))))) (insert (format "%s%s%s\n" gnus-tmp-thread-tree-header-string gnus-tmp-indentation gnus-tmp-subject-or-nil)) (if gnus-position (gnus-put-text-property gnus-position (1+ gnus-position) (quote gnus-position) t)))
  eval((let (gnus-position) (gnus-add-text-properties (point) (progn (insert gnus-tmp-unread) (point)) (cons (quote face) (cons (list (quote leuven-gnus-linum) (quote default)) (quote (gnus-face t))))) (gnus-add-text-properties (point) (progn (insert gnus-tmp-replied) (point)) (cons (quote face) (cons (list (quote leuven-gnus-org-date) (quote default)) (quote (gnus-face t))))) (gnus-add-text-properties (point) (progn (insert gnus-tmp-score-char) (point)) (cons (quote face) (cons (list (quote leuven-gnus-score) (quote default)) (quote (gnus-face t))))) (insert " ") (gnus-add-text-properties (point) (progn (insert (format "%20s " (gnus-user-date (aref gnus-tmp-header 3)))) (point)) (cons (quote face) (cons (list (quote leuven-gnus-org-date) (quote default)) (quote (gnus-face t))))) (insert " ") (gnus-add-text-properties (point) (progn (insert (format " %4s " (gnus-summary-line-message-size gnus-tmp-header))) (point)) (cons (quote face) (cons (list (quote leuven-gnus-diredp-file-suffix) (quote default)) (quote (gnus-face t))))) (setq gnus-position (point)) (insert (format "%-15s %s " (let* ((val (eval (let ... ...))) (need (- 15 (string-width val)))) (if (> need 0) (concat nil val (make-string need 32)) val)) (gnus-user-format-function-r gnus-tmp-header))) (gnus-add-text-properties (point) (progn (insert " ") (point)) (cons (quote face) (cons (list (quote leuven-gnus-linum) (quote default)) (quote (gnus-face t))))) (insert (format "%s%s%s\n" gnus-tmp-thread-tree-header-string gnus-tmp-indentation gnus-tmp-subject-or-nil)) (if gnus-position (gnus-put-text-property gnus-position (1+ gnus-position) (quote gnus-position) t))))
  gnus-summary-prepare-threads(...)
  gnus-summary-prepare()
  gnus-summary-read-group-1("nnimap+mc:INBOX.family-new" nil t nil nil nil)
  gnus-summary-read-group("nnimap+mc:INBOX.family-new" nil t nil nil nil nil)
  gnus-group-read-group(nil t)
  gnus-group-select-group(nil)
  gnus-topic-select-group(nil)
  call-interactively(gnus-topic-select-group nil nil)
  command-execute(gnus-topic-select-group)
--8<---------------cut here---------------end--------------->8---

IIUC, the sender has put a [ in my display name, and there is no
protection against such when matching regexps.

Best regards,
  Seb

-- 
Sebastien Vauban