On Tue, 17 May 2022, Marc Aurèle La France wrote:
On Tue, 17 May 2022, Iain Buclaw wrote:
Excerpts from Marc Aurèle La France's message of Mai 17, 2022 5:31 pm:
On Tue, 17 May 2022, Iain Buclaw wrote:
Excerpts from Marc Aurèle La France's message of Mai 16, 2022 11:34 pm:
On Sun, 15 May 2022, Iain Buclaw wrote:
Excerpts from Marc Aurèle La France's message of Mai 12, 2022 10:29 pm:

No compiler has any business rejecting files for the sole crime of
being symlinked to.  The following applies, modulo patch fuzz, to the
9, 10 and 11 series of compilers.

Given my use of shadow trees, this bug attempted to prevent me from
building 12.1.0.  The D-based gdc in 12.1.0 and up does not exhibit
this quirky behaviour.

Thanks, I've checked upstream and see the following change:

https://github.com/dlang/dmd/pull/11836/commits/ebda81e44fd0ca4b247a1860d9bef411c41c16cb

It should be fine to just backport that.

Thanks for the pointer.

I ended up with the three slightly different diffs below, one each for
the 9, 10 and 11 branches.  Each was rebuilt using 8.5.0, then used to
rebuild 12.1.0.  All of this ran smoothly without complaint, although I
wouldn't want to do this on a 486...

Signed-off-by: Marc Aurèle La France <t...@tuyoix.net>

For GCC 9   ----------  8< ----------

diff -aNpRruz -X /etc/diff.excludes gcc-9.4.0/gcc/d/dmd/root/filename.c devel-9.4.0/gcc/d/dmd/root/filename.c --- gcc-9.4.0/gcc/d/dmd/root/filename.c 2021-06-01 01:53:04.716474774 -0600 +++ devel-9.4.0/gcc/d/dmd/root/filename.c 2022-05-15 15:02:49.995441507 -0600 @@ -475,53 +475,7 @@ const char *FileName::safeSearchPath(Strings *path, const char *name)

     return FileName::searchPath(path, name, false);
 #elif POSIX
-    /* Even with realpath(), we must check for // and disallow it
-     */
-    for (const char *p = name; *p; p++)
-    {
-        char c = *p;
-        if (c == '/' && p[1] == '/')
-        {
-            return NULL;
-        }
-    }

I'd keep this check in, otherwise removing/replacing only the `if
(path)` branch looks OK to me.

The corresponding D code doesn't care about double slashes and neither
should this.  Also, the comment is misleading as realpath() would no
longer be used here.

True, but the D front-end does check the path in other places now:

https://github.com/dlang/dmd/blob/e9ba29d71b557fe079e95ee6554f116b24159bab/src/dmd/root/filename.d#L787-L803

https://github.com/dlang/dmd/blob/e9ba29d71b557fe079e95ee6554f116b24159bab/src/dmd/expressionsem.d#L5984-L6007

If we remove all checks, then there'd be nothing to prevent either
import("/file") or import("../file") from being used.

There is still no check for double slashes. All I want here is to fix a C++ -> D migration bug without leaving any detritus behind.

Anything more on this?

Marc.

Reply via email to