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. Iain.