Subject: bug#33564: closed (Re: bug#33564: Incorrect path canonicalisation)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 21 Aug 2019 02:28:03 +0000

Your bug report

#33564: Incorrect path canonicalisation

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
33564: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=33564
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#33564: Incorrect path canonicalisation
From: Stefan Kangas <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: Mattias Andrée <[email-masked]>, [email-masked]
Date: Wed, 21 Aug 2019 04:26:51 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Eli Zaretskii <[email-masked]> writes:

> tags 33564 notabug
> thanks
>
>> Date: Sat, 1 Dec 2018 21:04:50 +0100
>> From: Mattias Andrée <[email-masked]>
>>
>>     cd
>>     mkdir -p 1/2
>>     cd 1/2
>>     echo 3 > ../../3
>>     ln -s ~ 4
>>     echo 5 > 5
>>     emacs 4/../5 # works, but shouldn't
>>     emacs 4/../$USER/3 # does not works, should
>
> This is by design: expand-file-name doesn't follow symlinks.  It's
> documented not to do that: see the doc string and the ELisp manual.
>
>> On Linux, the proper way to get the canonical path
>> for a file with the file descriptor $fd:
>
> expand-file-name doesn't aim at yielding the canonical file name in
> that sense.

This was tagged notabug in December 2018; I'm now also closing this bug report.

Thanks,
Stefan Kangas

Subject: Incorrect path canonicalisation
From: Mattias Andrée <[email-masked]>
To: [email-masked]
Date: Sat, 1 Dec 2018 21:04:50 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Emacs 26.1 removes ..'s incorrectly from file names.
Emacs removes the directory in front the .. rather than
getting its parent directory.

Example:

	cd
	mkdir -p 1/2
	cd 1/2
	echo 3 > ../../3
	ln -s ~ 4
	echo 5 > 5
	emacs 4/../5 # works, but shouldn't
	emacs 4/../$USER/3 # does not works, should

On Linux, the proper way to get the canonical path
for a file with the file descriptor $fd:

	stat(3) /dev/fd/$fd
	p := readlink(3) /dev/fd/$fd
	if (st_nlinks != 0) {
		stat(3) /dev/fd/$fd
		if (st_nlinks == 0) {
			p := readlink(3) /dev/fd/$fd
			remove " (deleted)" from the end of p
		}
	} else {
		remove " (deleted)" from the end of p
	}
	canonical path is p