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.

Reply via email to