Re: GCC reporting piped input as a security feature
"Alan D. Salewski" <[email protected]> Tue, 9 Apr 2024 13:07:39 -0400
| Newsgroups | gmane.comp.sysutils.automake.general |
|---|---|
| Message-ID | <ZhV12wuEnKLHoTfK@localhost> |
On 2024-04-08 22:37:50, Jacob Bachmeyer <[email protected]> spake thus: >Richard Stallman 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.) >> > >With the small difference that I believe the special marker should be >'<stdin>' (with the angle brackets, as it is now), this could be another >good idea. Example output: "[working directory]/<stdin>///[specified >filename]" or "[specified filename]///<>/[working directory]/<stdin>". >GDB could be modified to recognize either form and read the specified >file (presumably some form of augmented C) but report that the sources >were transformed prior to compilation. The use of triple-slash ensures >that these combined strings cannot be confused with valid POSIX >filenames, although I suspect that uses of these strings would have to >be a GNU extension to the debugging info format. I do not think that the use of triple-slash (or any-N-slash) would entirely prevent potential confusion with valid POSIX filenames, as POSIX treats multiple slashes as equivalent to a single slash (except in at the beginning of a path, where two slash characters may have a different, implementation-defined meaning). Since a pathname component name can basically contains any bytes except <NUL> and <slash>, any token value chosen will likely have some non-zero potential for confusion with a valid POSIX pathname. From SUSv4 2018[0] (update from 2020-04-30, which is what I happen to have handy): <quote> 3.271 Pathname A string that is used to identify a file. In the context of POSIX.1-2017, a pathname may be limited to {PATH_MAX} bytes, including the terminating null byte. It has optional beginning <slash> characters, followed by zero or more filenames separated by <slash> characters. A pathname can optionally contain one or more trailing <slash> characters. Multiple successive <slash> characters are considered to be the same as one <slash>, except for the case of exactly two leading <slash> characters. </quote> and: <quote> 4.13 Pathname Resolution ... A pathname consisting of a single <slash> shall resolve to the root directory of the process. A null pathname shall not be successfully resolved. If a pathname begins with two successive <slash> characters, the first component following the leading <slash> characters may be interpreted in an implementation-defined manner, although more than two leading <slash> characters shall be treated as a single <slash> character. ... </quote> [0] The Open Group Base Specifications Issue 7, 2018 edition IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008) Copyright © 2001-2018 IEEE and The Open Group -- a l a n d. s a l e w s k i [email protected] [email protected] https://github.com/salewski