git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/7] Fix some bugs in abspath.c

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 4, 2012, 19:03 UTC
Message-ID
<7vehmha9uw.fsf@alter.siamese.dyndns.org>
In-Reply-To
<7va9x5bqz4.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 15 quoted lines
> mhagger@alum.mit.edu writes:
>
>> Please note that both absolute_path("") and real_path("") used to
>> return the current directory followed by a slash.  I believe that this
>> was a bug, and that it is more appropriate for both functions to
>> reject the empty string.  The evidence is as follows:
>>
>> * If this were intended behavior, presumably the return value would
>>   *not* have a trailing slash.
>
> That is weak.  The only thing you can infer from that observation is
> that the presense or absense of trailing '/' would not make any
> difference to the caller who wanted a path to the cwd (and is more
> convenient if the call is made so that a path relative to the cwd is
> tucked after it).

I still wonder why you want to reject "" as an input, as it could be argued that it is a valid way to say the current directory.

What does realpath(3) do?
    ... goes and looks ...

The realpath(3) wants an existing path, and "" naturally gives NOENT, so we cannot really draw parallel from it.

Ok, let's do this again.
    $ ./test-path-utils absolute_path ""
    /srv/git/git.git/
    $ ./test-path-utils absolute_path "foo"
    /srv/git/git.git/foo

so a caller has to be prepared to see the returned path sometimes terminated with slash and sometimes without, to form an absolute path to the file "bar" in the directory it gives to these functions (i.e. "/srv/git/git.git/bar" vs "/srv/git/git.git/foo/bar").

That is a reasonably good sign that either nobody calls these functions with "" or existing callers are buggy and would not handle that case well and need to be fixed anyway.

So I am fine with die() in your patch.
Thanks.
Show 9 quoted lines
>> * I couldn't find any callers that appeared to depend on the old
>>   behavior.
>
> That is a very good argument (especially if the audit were
> thorough).
>
> I would be tempted to say that we should die() on "" for now, cook
> the result outside "master" for a few weeks while auditing the
> callchains, and see if any of them complains.
Previous: Junio C HamanoNext: Nguyen Thai Ngoc Duy
Message 24 of 25 in “Fix some bugs in abspath.c”
  1. 0/7 Fix some bugs in abspath.cmhagger@alum.mit.edu, Sep 4, 2012
  2. 1/7 t0000: verify that absolute_path() fails if passed the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  3. 2/7 absolute_path(): reject the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  4. 3/7 t0000: verify that real_path() fails if passed the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  5. 4/7 real_path(): reject the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  6. 5/7 t0000: verify that real_path() works correctly with absolute pathsmhagger@alum.mit.edu, Sep 4, 2012
  7. Johannes SixtSep 5, 2012
  8. Michael HaggertySep 6, 2012
  9. Junio C HamanoSep 6, 2012
  10. Michael HaggertySep 9, 2012
  11. Junio C HamanoSep 9, 2012
  12. Junio C HamanoSep 9, 2012
  13. 6/7 real_path(): properly handle nonexistent top-level pathsmhagger@alum.mit.edu, Sep 4, 2012
  14. 7/7 t0000: verify that real_path() removes extra slashesmhagger@alum.mit.edu, Sep 4, 2012
  15. Junio C HamanoSep 4, 2012
  16. Nguyen Thai Ngoc DuySep 5, 2012
  17. Junio C HamanoSep 6, 2012
  18. Nguyen Thai Ngoc DuySep 6, 2012
  19. Junio C HamanoSep 6, 2012
  20. Nguyen Thai Ngoc DuySep 7, 2012
  21. Johannes SixtSep 5, 2012
  22. Michael HaggertySep 6, 2012
  23. Junio C HamanoSep 4, 2012
  24. Junio C HamanoSep 4, 2012
  25. Nguyen Thai Ngoc DuySep 5, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.