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-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: 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

* 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

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