Re: [PATCH 1/1] cat-file: quote-format name in error when using -z
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Dec 13, 2022, 15:06 UTC
- Message-ID
- <1ea2be75-f67c-fa99-12ed-139825ec5c29@dunelm.org.uk>
- In-Reply-To
- <xmqq8rjdv5um.fsf@gitster.g>
On 12/12/2022 00:11, Junio C Hamano wrote:
Show 37 quoted lines
> Phillip Wood <phillip.wood123@gmail.com> writes: > >> Without "-z" you cannot pass object names that contain newlines so not >> quoting the output does not cause a problem. We could start quoting >> the object name without "-z" but we'd be changing the output without a >> huge benefit. > > That's fair. The next question is from a devil's advocate: > is switching to the full cquote the best thing to do? > > If we were using the full cquote from the very beginning, of course > it is, simply because that is what is used in all other places in > Git. Using the full cquote does mean a LF byte will be protected > (i.e. instead of shown literally in the middle of other letters > around LF, "other\nletters around LF" would be shown), but pathnames > with backslashes and double quotes in them that have been shown > without problems would be shown differently and will break existing > parsers, which are written lazily with the assumption that they are > perfectly happy to be "simple" thans to not having to deal with LF > (because in their environment a path with LF in it do not matter). > > A bit safer thing to do is to replace LF (and not any other bytes > that would be quoted with full cquote) in the path given in these > messages with something else (like NUL to truncate the output > there). As these answers are given in order, the object names are > not absolutely needed to identify and match up the input and the > output, and properly written parsers would be prepared to see a > response with an object name that it did not request and handle it > sanely, such a change may not break such a parser for a path with > any byte that are modified with full cquote. > > The above is with a devil's adovocate hat on, and I do not care too > much, as I do not think butchering backslash with full cquote would > not hurt even existing Windows users (if "HEAD:t\README.txt" named > the same blob as "HEAD:t/README.txt" on a platform, doubling the > backslashes in the output would have made quite a lot of damage, but > I do not think we allow backslashes to name tree paths).
By default quoting also affects names that contain non-ascii characters. If we're worried about that we could only quote names that contain LF but as you point out the answers are given in order so I don't think there should be a problem with calling cquote unconditionally. (As this option has only existed for one release I suspect there aren't that many users yet as well)
Best Wishes
Phillip
> By the way, there is another use of obj_name in batch_object_write() > that can show whatever byte in it literally to the output. > > Thanks.