Re: GCC reporting piped input as a security feature

Jacob Bachmeyer <[email protected]> Fri, 12 Apr 2024 21:14:41 -0500
Newsgroups gmane.comp.gnu.standards,gmane.comp.sysutils.automake.general
Message-ID <[email protected]>
Zack Weinberg wrote:
> On Tue, Apr 9, 2024, at 11:35 PM, Jacob Bachmeyer wrote:
>   
>> Jan Engelhardt wrote:
>>     
>>> On Tuesday 2024-04-09 05:37, Jacob Bachmeyer wrote:
>>>
>>>       
>>>>> In principle it could be posible to output something different to
>>>>> describe this stramge situation explicitly.  For instance, output
>>>>> "via stdin" as a comment, or output `stdin/../filename' as the file
>>>>> name. (Programs that optimize the file name by deleting XXX/.../
>>>>> are likely not to check whether XXX is a real directory.)
>>>>>           
> ...
>
> How about `/dev/stdin/-` if no filename has been specified with #line or
> whatever, and `/dev/stdin/[filename]` if one has, where [filename] is
> the specified filename with all leading dots and slashes stripped,
> falling back to `-` if empty? /dev/stdin can be relied on to either not
> exist or not be a directory, so these shouldn't ever be openable.

I like that idea, but would suggest expanding on it as 
"/dev/stdin/[working directory]//-" or "/dev/stdin/[working 
directory]//[full specified filename]".  The double slash allows tools 
that care to parse out the specified filename, while the working 
directory preceding it provides a hint where to find that file if the 
specified filename is relative, but the kernel will collapse it to a 
single slash if a tool just passes the "[working directory]//[specified 
filename]" to open(2).  Since the working directory should itself be an 
absolute name, there would typically be a double slash after the 
"/dev/stdin" prefix.  Something like 
"/dev/stdin//var/cache/build/foopkg-1.0.0///usr/src/foopkg-1.0.0/special.c.m4" 
as an artificial example.


-- Jacob