bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

url libraries can reult in destruction of wrong buffer after 401


From: Vivek Dasmohapatra
Subject: url libraries can reult in destruction of wrong buffer after 401
Date: Tue, 28 Sep 2004 16:13:13 +0100

This bug report will be sent to the Free Software Foundation,
not to your local site managers!
Please write in English, because the Emacs maintainers do not have
translators to read other languages for them.

Your bug report will be posted to the address@hidden mailing list,
and to the gnu.emacs.bug news group.

In GNU Emacs 21.3.1 (i386-pc-linux-gnu, X toolkit)
 of 2004-08-26 on nessus, modified by Debian
configured using `configure '--build=i386-linux' '--host=i386-linux' 
'--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' 
'--localstatedir=/var/lib' '--infodir=/usr/share/info' 
'--mandir=/usr/share/man' '--with-pop=yes' '--with-x=yes' 
'--with-x-toolkit=athena' '--without-toolkit-scroll-bars' 'CFLAGS=-DDEBIAN -g 
-O2' 'build_alias=i386-linux' 'host_alias=i386-linux''
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: ja_JP
  value of $LC_CTYPE: ja_JP
  value of $LC_MESSAGES: en_GB
  value of $LC_MONETARY: en_GB
  value of $LC_NUMERIC: en_GB
  value of $LC_TIME: en_GB
  value of $LANG: ja_JP
  locale-coding-system: japanese-iso-8bit
  default-enable-multibyte-characters: t

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

Fetching a url with url-retrieve can reult in an anrbitrary buffer
being killed if a 401 (or possibly a 407) result is encountered:

url-http-parse-headers calls url-http-handle-authentication, 
which can call url-retrieve. 

This results in the current buffer being killed, and a new http buffer 
being generated. However, when the old http buffer is killed, emacs 
picks the top buffer from the list as the new current buffer, so by the 
time we get to the end of url-http-parse-headers, _that_ buffer is marked 
as dead even though it is not necessarily a url buffer, so next time the 
url libraries reap their dead buffers, an innocent bystander buffer is 
killed instead (and an obsolete http buffer may be left lying around too).

A possible fix (which I am currently using) is to call set-buffer
on the return value of url-http-parse-headers:

      (case url-http-response-status
        (401
         ;; The request requires user authentication.  The response
         ;; MUST include a WWW-Authenticate header field containing a
         ;; challenge applicable to the requested resource.  The
         ;; client MAY repeat the request with a suitable
         ;; Authorization header field.
         (url-mark-buffer-as-dead (current-buffer))
         (set-buffer (url-http-handle-authentication nil)))
etc ....

which makes sure that it is the right http buffer that is current when 
we come to mark the http buffers as dead.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]