GNU bug report logs -
#28156
Emacs quietly munges symlink contents
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Sun, 20 Aug 2017 10:29:01 UTC
Severity: normal
Tags: patch
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Sat, 26 Aug 2017 18:53:25 -0700
with message-id <c2c92aa8-cae8-3485-f4b1-ebbbc12d0da3 <at> cs.ucla.edu>
and subject line Re: bug#28156: Emacs quietly munges symlink contents
has caused the debbugs.gnu.org bug report #28156,
regarding Emacs quietly munges symlink contents
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
28156: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=28156
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
[Message part 3 (text/plain, inline)]
Tags: patch
The attached patch fixes some Emacs behavior that disagrees with the
documentation. Although the user manual says that make-symbolic-link "does
not expand the argument TARGET", Emacs expands leading "~" in the target. Also,
file-symlink-p quietly munges symlink contents if they appear to be a Tramp file
name. This behavior makes it impossible to write Emacs code that deals with
arbitrary local symbolic links, and Emacs mishandles copying of some symlinks
for this reason. At the operating system level, symlink targets are merely
strings, and are not file names that are interpreted (any interpretation occurs
later, only when the symlinks are followed), and Emacs should be consistent with
that.
It strikes me that a similar change probably needs to be made to Tramp, so that
remote symlinks also can be arbitrary strings too. However, that's outside my
expertise so this patch affects only local symlink contents.
[0001-Do-not-munge-contents-of-local-symbolic-links.patch (text/x-patch, attachment)]
[Message part 5 (message/rfc822, inline)]
Michael Albinus wrote:
> What about file-truename? I believe it still must quote the result,
> otherwise we run into problems. See
>
> (make-symbolic-link "/x:y:" "/tmp/foo")
> (file-truename "/tmp/foo")
>
> The latter shall return "/:/x:y:" (as of today) instead of
> "/x:y:".
Thanks for catching that. While looking into it, I noticed that file-truename
has long mishandled symlink contents starting with ~ as in the following example:
$ ln -s '~nosuchuser' /tmp/foo
$ ls -l /tmp/foo
lrwxrwxrwx. 1 eggert eggert 11 Aug 26 18:51 /tmp/foo -> ~nosuchuser
$ src/emacs -Q -batch -eval '(message "%S" (file-truename "/tmp/foo"))'
"/home/eggert/src/gnu/emacs/master-tmp/~nosuchuser"
I fixed both problems.
> Maybe we shall document it as well. Neither the docstring of
> `file-truename', nor the Lisp reference say something about.
Yes, the documentation could stand some improving here. I fixed it up a bit,
though not in the file-truename area as I'm thinking we may need some more
changes here and would like to cogitate about it first. I'll CC: you on any
further bug reports in this area.
I rebased the patch to master which simplified it since I no longer had to worry
about Tramp tests, and installed the result. Closing this bug report.
This bug report was last modified 7 years and 270 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.