From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 14867 invoked from network); 13 Jan 2021 13:38:28 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 13 Jan 2021 13:38:28 -0000 Received: (qmail 20310 invoked by uid 550); 13 Jan 2021 13:38:26 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 20290 invoked from network); 13 Jan 2021 13:38:25 -0000 Date: Wed, 13 Jan 2021 14:38:09 +0100 From: Natanael Copa To: musl@lists.openwall.com Message-ID: <20210113143809.608ea269@ncopa-desktop.lan> In-Reply-To: <20210113132835.22685-1-ncopa@alpinelinux.org> References: <20210113132835.22685-1-ncopa@alpinelinux.org> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-alpine-linux-musl) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [musl] [PATCH] make realpath replace leading // with a single / On Wed, 13 Jan 2021 14:28:35 +0100 Natanael Copa wrote: > On some systems a leading double slash may have special meaning, so > POSIX[1] says that "If a pathname begins with two successive > characters, the first component following the leading characters > may be interpreted in an implementation-defined manner" > > While current musl implementation is technically correct, most other > systems' (at least GNU libc, freebsd, openbsd, netbsd macOS) > implementations will replace a leading // with a single /. Make musl > do the same to avoid surprises. > > [1]: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13 > --- > src/misc/realpath.c | 3 --- > 1 file changed, 3 deletions(-) > > diff --git a/src/misc/realpath.c b/src/misc/realpath.c > index db8b74dc..414b4741 100644 > --- a/src/misc/realpath.c > +++ b/src/misc/realpath.c > @@ -46,9 +46,6 @@ restart: > q=0; > output[q++] = '/'; > p++; > - /* Initial // is special. */ > - if (stack[p] == '/' && stack[p+1] != '/') > - output[q++] = '/'; > continue; > } > This fixes gettext's (gnulib) testsuite, which tests if realpath("//", NULL) return "/" and fails if it doesn't. I ran this testcase on multiple systems: #include #include int main() { printf("%s\n", realpath("//", NULL)); return 0; } musl 1.1.24: / ubuntu 20.03: / macOS Big Sur: / OpenBSD 6.8: / FreeBSD 12.2: / NetBSD 9.1: / musl (current) // I don't know why this behavior was introduced in musl, but I think this only adds meaningless friction to downstream users. -nc