unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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; 5+ 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] 5+ messages in thread
* bug#453: 23.0.60; rfc822-bad-address: wrong-type-argument error
@ 2008-06-20 15:34 Stephen Berman
  0 siblings, 0 replies; 5+ 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] 5+ messages in thread

end of thread, other threads:[~2008-09-02 16:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
  -- strict thread matches above, loose matches on Subject: below --
2008-06-20 15:34 Stephen Berman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).