* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error @ 2008-06-20 15:34 ` Stephen Berman 2008-09-24 18:05 ` bug#453: marked as done (23.0.60; rfc822-bad-address: wrong-type-argument error) Emacs bug Tracking System 0 siblings, 1 reply; 6+ messages in thread From: Stephen Berman @ 2008-06-20 15:34 UTC (permalink / raw To: emacs-pretest-bug [-- Attachment #1: Type: text/plain, Size: 1412 bytes --] I was reading a newsgroup with Gnus, typed `n' (gnus-summary-next-unread-article) to read the next article[1], and got a wrong-type-argument error. The backtrace is attached. The error occurs in rfc822-bad-address, when the first argument of narrow-to-region, rfc822-address-start, is nil. The value is nil at this point because rfc822-addresses calls rfc822-nuke-whitespace before rfc822-address-start is assigned an initial value. Simply assigning an initial non-nil in the let declaration does not work, because then rfc822-bad-address tries to throw to 'address, but the corresponding catch in rfc822-addresses has not yet been established -- that happens after the call to rfc822-nuke-whitespace. I tried moving the catch above the rfc822-nuke-whitespace call: in combination with an initial value for rfc822-address-start, this allows rfc822-bad-address to return an error string to rfc822-addresses -- see the patch below --, but the caller in my setup, bbdb-rfc822-addresses, expects a list, so this raises another wrong-type-argument error. If it is legitimate for rfc822-bad-address to return a non-list value in this case, then the bug is presumably in bbdb-rfc822-addresses (from bbdb-snarf.el, not part of Emacs); but I don't know if this is the right diagnosis. If it is, I'll report it to the BBDB list, and the patch below, or a better one, should be applied to rfc822.el. Steve Berman [-- Attachment #2: backtrace --] [-- Type: text/plain, Size: 2862 bytes --] Debugger entered--Lisp error: (wrong-type-argument integer-or-marker-p nil) narrow-to-region(nil 5) (save-restriction (insert "_^_") (narrow-to-region rfc822-address-start (if ... ... ...)) (let (...) (while losers ... ... ...)) (goto-char (point-min)) (insert "(Unparsable address -- " reason ": \"") (goto-char (point-max)) (insert "\")")) rfc822-bad-address("Unbalanced comment (...)") (if (eobp) (rfc822-bad-address "Unbalanced comment (...)") (/= (setq ch ...) 41)) (while (if (eobp) (rfc822-bad-address "Unbalanced comment (...)") (/= ... 41)) (cond (... ...) (... ...) (... ...) (t ...))) (cond ((eobp) nil) ((= ... 40) (forward-char 1) (while ... ...) (forward-char -1) (delete-char 2) t) ((memq ch ...) (delete-region ... ...) t) (t nil)) (while (cond (... nil) (... ... ... ... ... t) (... ... t) (t nil))) (let (ch) (while (cond ... ... ... ...)) (or (not leave-space) (eobp) (bobp) (= ... 32) (insert 32))) rfc822-nuke-whitespace() (let ((list nil) tem rfc822-address-start) (rfc822-nuke-whitespace) (while (not ...) (setq rfc822-address-start ...) (setq tem ...) (cond ... ... ...)) (nreverse list)) (save-excursion (set-buffer buf) (make-local-variable (quote case-fold-search)) (setq case-fold-search nil) (insert header-text) (goto-char (point-min)) (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ ]" nil t) (replace-match "\\1 " t)) (goto-char (point-min)) (let (... tem rfc822-address-start) (rfc822-nuke-whitespace) (while ... ... ... ...) (nreverse list))) (unwind-protect (save-excursion (set-buffer buf) (make-local-variable ...) (setq case-fold-search nil) (insert header-text) (goto-char ...) (while ... ...) (goto-char ...) (let ... ... ... ...)) (and buf (kill-buffer buf))) (let ((buf ...)) (unwind-protect (save-excursion ... ... ... ... ... ... ... ...) (and buf ...))) (if (string-match "\\`[ ]*\\([^][ rfc822-addresses("(\"\"Gro\x00df") (let* ((thisaddr ...) (comma ...) (parsed ...)) (if (string-match "(" ...) (setq start comma) (setq addrs ... addrline ... start 0))) (while (string-match "\\([^,]+\\)," addrline start) (let* (... ... ...) (if ... ... ...))) (let (addrs (start 0)) (setq addrline (concat addrline ",")) (while (string-match "\\([^,]+\\)," addrline start) (let* ... ...)) addrs) bbdb-rfc822-addresses("(\"\"Gro\x00df, Werner\"\") <W.F.Gross@t-online.de>") bbdb-get-addresses(nil "stephen\\.berman@gmx\\.net" gnus-fetch-field) bbdb/gnus-update-records(nil) bbdb/gnus-pop-up-bbdb-buffer() run-hooks(gnus-article-prepare-hook) apply(run-hooks gnus-article-prepare-hook) gnus-run-hooks(gnus-article-prepare-hook) gnus-article-prepare-display() gnus-article-prepare(166195 nil) gnus-summary-display-article(166195) gnus-summary-next-article(t nil) gnus-summary-next-unread-article() call-interactively(gnus-summary-next-unread-article nil nil) [-- Attachment #3: Type: text/plain, Size: 6364 bytes --] *** emacs/lisp/mail/rfc822.el.~1.28.~ 2008-05-06 17:54:09.000000000 +0200 --- emacs/lisp/mail/rfc822.el 2008-06-20 17:16:10.000000000 +0200 *************** *** 278,319 **** (list (substring header-text (match-beginning 1) (match-end 1))) (let ((buf (generate-new-buffer " rfc822"))) (unwind-protect ! (save-excursion ! (set-buffer buf) ! (make-local-variable 'case-fold-search) ! (setq case-fold-search nil) ;For speed(?) ! (insert header-text) ! ;; unfold continuation lines ! (goto-char (point-min)) ! (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ \t]" nil t) ! (replace-match "\\1 " t)) ! (goto-char (point-min)) ! (let ((list ()) ! tem ! rfc822-address-start); this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem ! (catch 'address ; this is for rfc822-bad-address ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t))))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list))) ! (and buf (kill-buffer buf)))))) (provide 'rfc822) --- 278,322 ---- (list (substring header-text (match-beginning 1) (match-end 1))) (let ((buf (generate-new-buffer " rfc822"))) (unwind-protect ! (save-excursion ! (set-buffer buf) ! (make-local-variable 'case-fold-search) ! (setq case-fold-search nil) ;For speed(?) ! (insert header-text) ! ;; unfold continuation lines ! (goto-char (point-min)) ! (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ \t]" nil t) ! (replace-match "\\1 " t)) ! (goto-char (point-min)) ! (let ((list ()) ! tem ! ;; This is for rfc822-bad-address. Give it a non-nil initial ! ;; value to prevent rfc822-bad-address from raising a ! ;; wrong-type-argument error ! (rfc822-address-start (point))) ! (catch 'address ; this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t)))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list)))) ! (and buf (kill-buffer buf)))))) (provide 'rfc822) In GNU Emacs 23.0.60.3 (i686-pc-linux-gnu, GTK+ Version 2.12.0) of 2008-06-16 on escher Windowing system distributor `The X.Org Foundation', version 11.0.70200000 Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=local locale-coding-system: utf-8-unix default-enable-multibyte-characters: t Major mode: Debugger Minor modes in effect: shell-dirtrack-mode: t show-paren-mode: t recentf-mode: t tabbar-mwheel-mode: t tabbar-mode: t display-time-mode: t tooltip-mode: t tool-bar-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t global-auto-composition-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t temp-buffer-resize-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent input: <switch-frame> <help-echo> <switch-frame> <down-mouse-1> <mouse-movement> <mouse-1> C-x o <f1> C-c j l i s <return> <down-mouse-1> <mouse-1> <help-echo> <select-window> C-u C-M-x C-c j s u m <return> n <switch-frame> C-x b SPC r <tab> <return> <switch-frame> f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f <switch-frame> C-x b SPC r <tab> <return> <right> <left> <down-mouse-1> <mouse-movement> <mouse-movement> <drag-mouse-1> C-x b a <return> C-y C-x b SPC r <tab> <return> C-a <switch-frame> SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC i SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC q t <help-echo> <select-window> <down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5> <triple-down-mouse-5> <triple-mouse-5> <down-mouse-4> <mouse-4> <double-down-mouse-4> <double-mouse-4> <triple-down-mouse-4> <triple-mouse-4> <select-window> <help-echo> <select-window> <select-window> <help-echo> <select-window> <help-echo> <help-echo> <select-window> <help-echo> <help-echo> <select-window> h M-u <up> <up> <f1> C-x b l i s <tab> C-g C-x b r <tab> <return> C-M-x C-M-y C-M-x C-x b * S <tab> u <tab> <return> n <f1> C-x b r <tab> <return> <down-mouse-4> <mouse-4> <double-down-mouse-4> <double-mouse-4> <down-mouse-4> <mouse-4> <down-mouse-1> <mouse-1> C-s C-w C-w C-w C-s C-s C-s C-s C-s C-s C-s C-M-a M-< C-c j d <return> M-x g u <return> <down-mouse-1> <mouse-movement> <mouse-1> C-x b r <tab> <return> C-x d C-g C-x b <return> <up> <up> <up> <up> M-x r e p o <tab> r <tab> b <tab> <return> <switch-frame> <down-mouse-1> <mouse-movement> <mouse-1> C-c j <switch-frame> C-c j e <backspace> l i s <return> <down-mouse-1> <mouse-1> <double-down-mouse-1> <double-mouse-1> <switch-frame> C-x b <return> M-x r e p o <tab> r <tab> b <tab> <return> Recent messages: Auto-saving...done Mark saved where search started Mark set Auto-saving...done Mark set Auto-saving...done Quit Making completion list... byte-code: Command attempted to use minibuffer while in minibuffer Making completion list... Footnotes: [1] This is the article: <http://permalink.gmane.org/gmane.linux.suse.general.german/166195> ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#453: marked as done (23.0.60; rfc822-bad-address: wrong-type-argument error) 2008-06-20 15:34 ` bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error Stephen Berman @ 2008-09-24 18:05 ` Emacs bug Tracking System 0 siblings, 0 replies; 6+ messages in thread From: Emacs bug Tracking System @ 2008-09-24 18:05 UTC (permalink / raw To: Chong Yidong [-- Attachment #1: Type: text/plain, Size: 876 bytes --] Your message dated Wed, 24 Sep 2008 13:57:53 -0400 with message-id <87ej39juji.fsf@cyd.mit.edu> and subject line Re: bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error has caused the Emacs bug report #453, regarding 23.0.60; rfc822-bad-address: wrong-type-argument error to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact don@donarmstrong.com immediately.) -- 453: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=453 Emacs Bug Tracking System Contact don@donarmstrong.com with problems [-- Attachment #2: Type: message/rfc822, Size: 12923 bytes --] [-- Attachment #2.1.1: Type: text/plain, Size: 1412 bytes --] I was reading a newsgroup with Gnus, typed `n' (gnus-summary-next-unread-article) to read the next article[1], and got a wrong-type-argument error. The backtrace is attached. The error occurs in rfc822-bad-address, when the first argument of narrow-to-region, rfc822-address-start, is nil. The value is nil at this point because rfc822-addresses calls rfc822-nuke-whitespace before rfc822-address-start is assigned an initial value. Simply assigning an initial non-nil in the let declaration does not work, because then rfc822-bad-address tries to throw to 'address, but the corresponding catch in rfc822-addresses has not yet been established -- that happens after the call to rfc822-nuke-whitespace. I tried moving the catch above the rfc822-nuke-whitespace call: in combination with an initial value for rfc822-address-start, this allows rfc822-bad-address to return an error string to rfc822-addresses -- see the patch below --, but the caller in my setup, bbdb-rfc822-addresses, expects a list, so this raises another wrong-type-argument error. If it is legitimate for rfc822-bad-address to return a non-list value in this case, then the bug is presumably in bbdb-rfc822-addresses (from bbdb-snarf.el, not part of Emacs); but I don't know if this is the right diagnosis. If it is, I'll report it to the BBDB list, and the patch below, or a better one, should be applied to rfc822.el. Steve Berman [-- Attachment #2.1.2: backtrace --] [-- Type: text/plain, Size: 2862 bytes --] Debugger entered--Lisp error: (wrong-type-argument integer-or-marker-p nil) narrow-to-region(nil 5) (save-restriction (insert "_^_") (narrow-to-region rfc822-address-start (if ... ... ...)) (let (...) (while losers ... ... ...)) (goto-char (point-min)) (insert "(Unparsable address -- " reason ": \"") (goto-char (point-max)) (insert "\")")) rfc822-bad-address("Unbalanced comment (...)") (if (eobp) (rfc822-bad-address "Unbalanced comment (...)") (/= (setq ch ...) 41)) (while (if (eobp) (rfc822-bad-address "Unbalanced comment (...)") (/= ... 41)) (cond (... ...) (... ...) (... ...) (t ...))) (cond ((eobp) nil) ((= ... 40) (forward-char 1) (while ... ...) (forward-char -1) (delete-char 2) t) ((memq ch ...) (delete-region ... ...) t) (t nil)) (while (cond (... nil) (... ... ... ... ... t) (... ... t) (t nil))) (let (ch) (while (cond ... ... ... ...)) (or (not leave-space) (eobp) (bobp) (= ... 32) (insert 32))) rfc822-nuke-whitespace() (let ((list nil) tem rfc822-address-start) (rfc822-nuke-whitespace) (while (not ...) (setq rfc822-address-start ...) (setq tem ...) (cond ... ... ...)) (nreverse list)) (save-excursion (set-buffer buf) (make-local-variable (quote case-fold-search)) (setq case-fold-search nil) (insert header-text) (goto-char (point-min)) (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ ]" nil t) (replace-match "\\1 " t)) (goto-char (point-min)) (let (... tem rfc822-address-start) (rfc822-nuke-whitespace) (while ... ... ... ...) (nreverse list))) (unwind-protect (save-excursion (set-buffer buf) (make-local-variable ...) (setq case-fold-search nil) (insert header-text) (goto-char ...) (while ... ...) (goto-char ...) (let ... ... ... ...)) (and buf (kill-buffer buf))) (let ((buf ...)) (unwind-protect (save-excursion ... ... ... ... ... ... ... ...) (and buf ...))) (if (string-match "\\`[ ]*\\([^][ rfc822-addresses("(\"\"Gro\x00df") (let* ((thisaddr ...) (comma ...) (parsed ...)) (if (string-match "(" ...) (setq start comma) (setq addrs ... addrline ... start 0))) (while (string-match "\\([^,]+\\)," addrline start) (let* (... ... ...) (if ... ... ...))) (let (addrs (start 0)) (setq addrline (concat addrline ",")) (while (string-match "\\([^,]+\\)," addrline start) (let* ... ...)) addrs) bbdb-rfc822-addresses("(\"\"Gro\x00df, Werner\"\") <W.F.Gross@t-online.de>") bbdb-get-addresses(nil "stephen\\.berman@gmx\\.net" gnus-fetch-field) bbdb/gnus-update-records(nil) bbdb/gnus-pop-up-bbdb-buffer() run-hooks(gnus-article-prepare-hook) apply(run-hooks gnus-article-prepare-hook) gnus-run-hooks(gnus-article-prepare-hook) gnus-article-prepare-display() gnus-article-prepare(166195 nil) gnus-summary-display-article(166195) gnus-summary-next-article(t nil) gnus-summary-next-unread-article() call-interactively(gnus-summary-next-unread-article nil nil) [-- Attachment #2.1.3: Type: text/plain, Size: 6364 bytes --] *** emacs/lisp/mail/rfc822.el.~1.28.~ 2008-05-06 17:54:09.000000000 +0200 --- emacs/lisp/mail/rfc822.el 2008-06-20 17:16:10.000000000 +0200 *************** *** 278,319 **** (list (substring header-text (match-beginning 1) (match-end 1))) (let ((buf (generate-new-buffer " rfc822"))) (unwind-protect ! (save-excursion ! (set-buffer buf) ! (make-local-variable 'case-fold-search) ! (setq case-fold-search nil) ;For speed(?) ! (insert header-text) ! ;; unfold continuation lines ! (goto-char (point-min)) ! (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ \t]" nil t) ! (replace-match "\\1 " t)) ! (goto-char (point-min)) ! (let ((list ()) ! tem ! rfc822-address-start); this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem ! (catch 'address ; this is for rfc822-bad-address ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t))))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list))) ! (and buf (kill-buffer buf)))))) (provide 'rfc822) --- 278,322 ---- (list (substring header-text (match-beginning 1) (match-end 1))) (let ((buf (generate-new-buffer " rfc822"))) (unwind-protect ! (save-excursion ! (set-buffer buf) ! (make-local-variable 'case-fold-search) ! (setq case-fold-search nil) ;For speed(?) ! (insert header-text) ! ;; unfold continuation lines ! (goto-char (point-min)) ! (while (re-search-forward "\\([^\\]\\(\\\\\\\\\\)*\\)\n[ \t]" nil t) ! (replace-match "\\1 " t)) ! (goto-char (point-min)) ! (let ((list ()) ! tem ! ;; This is for rfc822-bad-address. Give it a non-nil initial ! ;; value to prevent rfc822-bad-address from raising a ! ;; wrong-type-argument error ! (rfc822-address-start (point))) ! (catch 'address ; this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t)))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list)))) ! (and buf (kill-buffer buf)))))) (provide 'rfc822) In GNU Emacs 23.0.60.3 (i686-pc-linux-gnu, GTK+ Version 2.12.0) of 2008-06-16 on escher Windowing system distributor `The X.Org Foundation', version 11.0.70200000 Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=local locale-coding-system: utf-8-unix default-enable-multibyte-characters: t Major mode: Debugger Minor modes in effect: shell-dirtrack-mode: t show-paren-mode: t recentf-mode: t tabbar-mwheel-mode: t tabbar-mode: t display-time-mode: t tooltip-mode: t tool-bar-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t global-auto-composition-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t temp-buffer-resize-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent input: <switch-frame> <help-echo> <switch-frame> <down-mouse-1> <mouse-movement> <mouse-1> C-x o <f1> C-c j l i s <return> <down-mouse-1> <mouse-1> <help-echo> <select-window> C-u C-M-x C-c j s u m <return> n <switch-frame> C-x b SPC r <tab> <return> <switch-frame> f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f <switch-frame> C-x b SPC r <tab> <return> <right> <left> <down-mouse-1> <mouse-movement> <mouse-movement> <drag-mouse-1> C-x b a <return> C-y C-x b SPC r <tab> <return> C-a <switch-frame> SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC i SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC q t <help-echo> <select-window> <down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <down-mouse-5> <mouse-5> <double-down-mouse-5> <double-mouse-5> <triple-down-mouse-5> <triple-mouse-5> <down-mouse-4> <mouse-4> <double-down-mouse-4> <double-mouse-4> <triple-down-mouse-4> <triple-mouse-4> <select-window> <help-echo> <select-window> <select-window> <help-echo> <select-window> <help-echo> <help-echo> <select-window> <help-echo> <help-echo> <select-window> h M-u <up> <up> <f1> C-x b l i s <tab> C-g C-x b r <tab> <return> C-M-x C-M-y C-M-x C-x b * S <tab> u <tab> <return> n <f1> C-x b r <tab> <return> <down-mouse-4> <mouse-4> <double-down-mouse-4> <double-mouse-4> <down-mouse-4> <mouse-4> <down-mouse-1> <mouse-1> C-s C-w C-w C-w C-s C-s C-s C-s C-s C-s C-s C-M-a M-< C-c j d <return> M-x g u <return> <down-mouse-1> <mouse-movement> <mouse-1> C-x b r <tab> <return> C-x d C-g C-x b <return> <up> <up> <up> <up> M-x r e p o <tab> r <tab> b <tab> <return> <switch-frame> <down-mouse-1> <mouse-movement> <mouse-1> C-c j <switch-frame> C-c j e <backspace> l i s <return> <down-mouse-1> <mouse-1> <double-down-mouse-1> <double-mouse-1> <switch-frame> C-x b <return> M-x r e p o <tab> r <tab> b <tab> <return> Recent messages: Auto-saving...done Mark saved where search started Mark set Auto-saving...done Mark set Auto-saving...done Quit Making completion list... byte-code: Command attempted to use minibuffer while in minibuffer Making completion list... Footnotes: [1] This is the article: <http://permalink.gmane.org/gmane.linux.suse.general.german/166195> [-- Attachment #3: Type: message/rfc822, Size: 1262 bytes --] From: Chong Yidong <cyd@stupidchicken.com> To: Stephen Berman <stephen.berman@gmx.net> Cc: 453-done@emacsbugs.donarmstrong.com Subject: Re: bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error Date: Wed, 24 Sep 2008 13:57:53 -0400 Message-ID: <87ej39juji.fsf@cyd.mit.edu> > Patch (i) (returns an error string as specified by rfc822-bad-address, > but raises a wrong-type error with bbdb-rfc822-addresses): I think this is the right approach; bbdb-rfc822-addresses should handle the error. I've checked in your patch, thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error
@ 2008-08-26 21:30 Chong Yidong
2008-08-27 10:38 ` Stephen Berman
0 siblings, 1 reply; 6+ messages in thread
From: Chong Yidong @ 2008-08-26 21:30 UTC (permalink / raw
To: Stephen Berman; +Cc: 453
Sorry for the delay in replying.
> I was reading a newsgroup with Gnus, typed `n'
> (gnus-summary-next-unread-article) to read the next article[1], and
> got a wrong-type-argument error. The backtrace is attached. The
> error occurs in rfc822-bad-address, when the first argument of
> narrow-to-region, rfc822-address-start, is nil. The value is nil at
> this point because rfc822-addresses calls rfc822-nuke-whitespace
> before rfc822-address-start is assigned an initial value.
I don't see how rfc822-address-start could be nil. The code sets it to
(point) just before the call to rfc822-bad-address. Could you further
explain your reasoning?
(while (not (eobp))
(setq rfc822-address-start (point))
(setq tem
(catch 'address ; this is for rfc822-bad-address
(cond ((rfc822-looking-at ?\,)
nil)
((looking-at "[][\000-\037@;:\\.>)]")
(forward-char)
(rfc822-bad-address
(format "Strange character \\%c found"
(preceding-char))))
(By the way, next time you mail a patch, please try not to change
whitespaces; that makes the patch very difficult to read. Thanks.)
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error 2008-08-26 21:30 bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error Chong Yidong @ 2008-08-27 10:38 ` Stephen Berman 2008-08-27 14:38 ` Chong Yidong 0 siblings, 1 reply; 6+ messages in thread From: Stephen Berman @ 2008-08-27 10:38 UTC (permalink / raw To: Chong Yidong; +Cc: 453 On Tue, 26 Aug 2008 17:30:05 -0400 Chong Yidong <cyd@stupidchicken.com> wrote: > Sorry for the delay in replying. > >> I was reading a newsgroup with Gnus, typed `n' >> (gnus-summary-next-unread-article) to read the next article[1], and >> got a wrong-type-argument error. The backtrace is attached. The >> error occurs in rfc822-bad-address, when the first argument of >> narrow-to-region, rfc822-address-start, is nil. The value is nil at >> this point because rfc822-addresses calls rfc822-nuke-whitespace >> before rfc822-address-start is assigned an initial value. > > I don't see how rfc822-address-start could be nil. The code sets it to > (point) just before the call to rfc822-bad-address. Could you further > explain your reasoning? The error occurs before that setq can be called, because rfc822-bad-address is also called from rfc822-nuke-whitespace, and at this point rfc822-address-start is nil. In more detail: 1. bbdb-rfc822-addresses is trying to parse this header: (""Groß, Werner"") <W.F.Gross@t-online.de> which presumably violates RFC822. 2. bbdb-rfc822-addresses calls rfc822-addresses, which turns the header into this string: (""Groß and, after let-binding but before setq-ing rfc822-address-start, 3. calls rfc822-nuke-whitespace, which further truncates the header to: ( and then calls 4. rfc822-bad-address, which tries to call narrow-to-region with rfc822-address-start, which is still nil, as the beginning of the region: BZZT! > (By the way, next time you mail a patch, please try not to change > whitespaces; that makes the patch very difficult to read. Thanks.) Sorry. That was the result of doing indent-region, which I assume means the existing indentation does not conform to Emacs conventions. Would it be appropriate to submit a separate patch to correct that? Steve Berman ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error 2008-08-27 10:38 ` Stephen Berman @ 2008-08-27 14:38 ` Chong Yidong 2008-09-02 16:07 ` Stephen Berman 0 siblings, 1 reply; 6+ messages in thread From: Chong Yidong @ 2008-08-27 14:38 UTC (permalink / raw To: Stephen Berman; +Cc: 453 Stephen Berman <stephen.berman@gmx.net> writes: > 1. bbdb-rfc822-addresses is trying to parse this header: > (""Groß, Werner"") <W.F.Gross@t-online.de> > which presumably violates RFC822. > 2. bbdb-rfc822-addresses calls rfc822-addresses, which turns the header > into this string: > (""Groß > and, after let-binding but before setq-ing rfc822-address-start, > 3. calls rfc822-nuke-whitespace, which further truncates the header to: > ( > and then calls > 4. rfc822-bad-address, which tries to call narrow-to-region with > rfc822-address-start, which is still nil, as the beginning of the > region: BZZT! Now I understand. could you send a new patch? Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error 2008-08-27 14:38 ` Chong Yidong @ 2008-09-02 16:07 ` Stephen Berman 0 siblings, 0 replies; 6+ messages in thread From: Stephen Berman @ 2008-09-02 16:07 UTC (permalink / raw To: Chong Yidong; +Cc: 453 On Wed, 27 Aug 2008 10:38:24 -0400 Chong Yidong <cyd@stupidchicken.com> wrote: > Stephen Berman <stephen.berman@gmx.net> writes: > >> 1. bbdb-rfc822-addresses is trying to parse this header: >> (""Groß, Werner"") <W.F.Gross@t-online.de> >> which presumably violates RFC822. >> 2. bbdb-rfc822-addresses calls rfc822-addresses, which turns the header >> into this string: >> (""Groß >> and, after let-binding but before setq-ing rfc822-address-start, >> 3. calls rfc822-nuke-whitespace, which further truncates the header to: >> ( >> and then calls >> 4. rfc822-bad-address, which tries to call narrow-to-region with >> rfc822-address-start, which is still nil, as the beginning of the >> region: BZZT! > > Now I understand. could you send a new patch? Thanks. I was going to just resend my patch minus the inappropriate white space changes. But upon reconsideration, I'm not confident that the patch I sent previously DTRT. I'm not even sure what TRT is here: as I wrote in my OP, my patch returns an error string as specified by rfc822-bad-address, but the caller bbdb-rfc822-addresses expects a list, so it still raises a wrong-type error. This happens when the relocated catch sexp has scope to the end of the let that immediately encloses it (patch (i) below). But I leave the catch in its existing position and move rfc822-nuke-whitespace to within it (patch (ii) below), then no error is raised, but also there's no indication of a bad address; yet stepping through the code with edebug does pass through rfc822-bad-address. So where should the catch be located? Hopefully someone familiar (unlike me) with RFC 822 and rfc822.el, and ideally also bbdb-rfc822-addresses, can answer that question and say whether either of these patches is suitable, or provide a better one. Steve Berman Patch (i) (returns an error string as specified by rfc822-bad-address, but raises a wrong-type error with bbdb-rfc822-addresses): *** emacs/lisp/mail/rfc822.el.~1.28.~ 2008-05-06 17:54:09.000000000 +0200 --- emacs/lisp/mail/rfc822.el 2008-09-02 17:35:28.000000000 +0200 *************** *** 292,303 **** (goto-char (point-min)) (let ((list ()) tem ! rfc822-address-start); this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem ! (catch 'address ; this is for rfc822-bad-address (cond ((rfc822-looking-at ?\,) nil) ((looking-at "[][\000-\037@;:\\.>)]") --- 292,306 ---- (goto-char (point-min)) (let ((list ()) tem ! ;; This is for rfc822-bad-address. Give it a non-nil initial ! ;; value to prevent rfc822-bad-address from raising a ! ;; wrong-type-argument error ! (rfc822-address-start (point))) ! (catch 'address ; this is for rfc822-bad-address ! (rfc822-nuke-whitespace) ! (while (not (eobp)) ! (setq rfc822-address-start (point)) ! (setq tem (cond ((rfc822-looking-at ?\,) nil) ((looking-at "[][\000-\037@;:\\.>)]") *************** *** 306,318 **** (format "Strange character \\%c found" (preceding-char)))) (t ! (rfc822-addresses-1 t))))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list))) (and buf (kill-buffer buf)))))) (provide 'rfc822) --- 309,321 ---- (format "Strange character \\%c found" (preceding-char)))) (t ! (rfc822-addresses-1 t)))) ! (cond ((null tem)) ! ((stringp tem) ! (setq list (cons tem list))) ! (t ! (setq list (nconc (nreverse tem) list))))) ! (nreverse list)))) (and buf (kill-buffer buf)))))) (provide 'rfc822) Patch (ii) (bbdb-rfc822-addresses raises no error, but also there's no indication of a bad address; yet stepping through the code with edebug does pass through rfc822-bad-address): *** emacs/lisp/mail/rfc822.el.~1.28.~ 2008-05-06 17:54:09.000000000 +0200 --- emacs/lisp/mail/rfc822.el 2008-09-02 18:01:49.000000000 +0200 *************** *** 293,312 **** (let ((list ()) tem rfc822-address-start); this is for rfc822-bad-address - (rfc822-nuke-whitespace) (while (not (eobp)) (setq rfc822-address-start (point)) (setq tem (catch 'address ; this is for rfc822-bad-address ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t))))) (cond ((null tem)) ((stringp tem) (setq list (cons tem list))) --- 293,313 ---- (let ((list ()) tem rfc822-address-start); this is for rfc822-bad-address (while (not (eobp)) (setq rfc822-address-start (point)) (setq tem (catch 'address ; this is for rfc822-bad-address ! (progn ! (rfc822-nuke-whitespace) ! (cond ((rfc822-looking-at ?\,) ! nil) ! ((looking-at "[][\000-\037@;:\\.>)]") ! (forward-char) ! (rfc822-bad-address ! (format "Strange character \\%c found" ! (preceding-char)))) ! (t ! (rfc822-addresses-1 t)))))) (cond ((null tem)) ((stringp tem) (setq list (cons tem list))) ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-09-24 18:05 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <87ej39juji.fsf@cyd.mit.edu> 2008-06-20 15:34 ` bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error Stephen Berman 2008-09-24 18:05 ` bug#453: marked as done (23.0.60; rfc822-bad-address: wrong-type-argument error) Emacs bug Tracking System 2008-08-26 21:30 bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error Chong Yidong 2008-08-27 10:38 ` Stephen Berman 2008-08-27 14:38 ` Chong Yidong 2008-09-02 16:07 ` Stephen Berman
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.