hosed in matching `/'

Ilya N. Golubev gin at mo.msk.ru
Tue Apr 25 12:20:16 EDT 2006


The change of `tramp.el' of 2006-01-27 hoses all emacsen I know.  As
part of <Sync with Tramp 2.0.53> of 2006/04/17 13:11:42 +0 it got into
xemacs packages cvs, so cc-ing to its maintainers.  Reproducing it as
follows.

xemacs -vanilla -batch -eval '(let ((default-directory "/"))
 (write-region (point-min) (point-max) "/dev/null" nil (quote silent)))'
Lisp nesting exceeds `max-lisp-eval-depth'
xemacs exiting
.

After `tramp' with this change is installed and emacs is started, it
loads autoload files, which add to `file-name-handler-alist' an
association of `tramp-completion-file-name-handler' with
"^/\\([[][^]]*\\)?$", regexp that matches `/'.
`tramp-completion-file-name-handler' is autoloaded, and `tramp'
defining it is not loaded yet.

`expand-file-name' calls file name handler even if its
DEFAULT-DIRECTORY argument matches the regexp from
`file-name-handler-alist'.  And `expand-file-name' is called in many
cases, even in the following backtrace.  (Line numbers are from local
xemacs 21.4 with local changes.)

Fexpand_file_name
    at src/fileio.c:810
locate_file
    at src/lread.c:1246
Flocate_file
    at src/lread.c:873

  locate-file("tramp" ;regular `load-path value
 (".elc" ".el" ""))
  load("tramp" nil nil nil)

If at this point it is not obvious how emacs gets into infinite
recursion, detailing it.  Once something calls `expand-file-name' with
DEFAULT-DIRECTORY set to `/' (by passing explicitly or by defaulting
to that value when `nil' is passed) in a buffer with default directory
value `/', emacs does the following.

. Calls `tramp-completion-file-name-handler'.

. Processes autoload.

. Tries to load `tramp'.

. Calls `expand-file-name' with the same DEFAULT-DIRECTORY '/'.

`gnus' package (temporarily) sets `default-directory' to '/' during
(implicit) `expand-file-name' call, like in the example above.  Will
post details on request.

Please fix `tramp' so that `/' is not matched by (tramp regexps from)
`file-name-handler-alist' before `tramp' is loaded.  Maintainers may
have their own ideas how this should be ensured, and how the safe
regexp not matching `/' should be computed, so do not submitting a
patch.




More information about the XEmacs-Beta mailing list