Gnus v5.8.8
XEmacs 21.4 (patch 3) "Academic Rigor" [Lucid] (i686-pc-cygwin) of Thu May 17
2001 on SHALOM
configured using `configure --use-union-type --with-netinstall --with-x=no
--with-site-lisp --bindir=/usr/local/bin/i686-pc-cygwin'
When trying to edit the score file in my Gnus mail group
"nnimap+speakeasy:INBOX", XEmacs hangs in an infinite loop trying to
create the directory "/home/sharr/doc/news/nnimap+speakeasy:" - which
should not and apparently cannot be created.
The trouble is in gnus-score.el within the function
`gnus-score-edit-current-scores':
,----
| (defun gnus-score-edit-current-scores (file)
| "Edit the current score alist."
| (interactive (list gnus-current-score-file))
| (if (not gnus-current-score-file)
| (error "No current score file")
| (let ((winconf (current-window-configuration)))
| (when (buffer-name gnus-summary-buffer)
| (gnus-score-save))
| (gnus-make-directory (file-name-directory file))
| (setq gnus-score-edit-buffer (find-file-noselect file))
| (gnus-configure-windows 'edit-score)
| (gnus-score-mode)
| (setq gnus-score-edit-exit-function 'gnus-score-edit-done)
| (make-local-variable 'gnus-prev-winconf)
| (setq gnus-prev-winconf winconf))
| (gnus-message
| 4 (substitute-command-keys
| "\\<gnus-score-mode-map>\\[gnus-score-edit-exit] to save edits"))))
`----
Note the call to `gnus-make-directory.' The argument "file" is
initially "/home/sharr/doc/news/nnimap+speakeasy:INBOX.SCORE". The
function `file-name-directory' applied to this file returns the path
"/home/sharr/doc/news/nnimap+speakeasy:" - which contains an illegal
colon character. When this path is eventually passed to the function
`make-directory', XEmacs hangs, consuming the full CPU and more and
more memory. Looking at the `make-directory' code, one can see a loop
that apparently gets stuck waiting for this impossible file name to
exist.
This is another artifact of the strange file name conversions used in
XEmacs on Windows. The function `nnheader-translate-file-chars' is
used occasionally - but not consistently - by Gnus to come up with
file names that can actually exist on Windows. Strangely, '+' is
considered an illegal character even though it's a valid Windows path
character. More dangerously, ':' is considered legal even though it's
obviously not:
,----
| (nnheader-translate-file-chars "a+b")
| "a-b"
|
| (nnheader-translate-file-chars "a:b")
| "a:b"
`----
This bug is a symptom of interaction among flaws in
`gnus-edit-current-scores', `nnheader-translate-file-chars',
`file-name-directory', and `make-directory' - all considered in the
context of Windows NT atop Cygwin.
--
Steven E. Harris :: seh(a)speakeasy.org
GnuPG :: 0x70248E67