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

Re: [PATCH v5 2/5] setup: sanity check file size in read_gitfile_gently

From
erik elfström <erik.elfstrom@gmail.com>
Date
Apr 28, 2015, 19:28 UTC
Message-ID
<CAMpP7NY76Tj_=_6Evxvox20OmQ5LnNiK1j4VHLd0jKhRmci51g@mail.gmail.com>
In-Reply-To
<20150428060222.GK24580@peff.net>
On Tue, Apr 28, 2015 at 8:02 AM, Jeff King <peff@peff.net> wrote:
Show 8 quoted lines
>
> My understanding is that PATH_MAX is set absurdly low on Windows
> systems (and doesn't actually represent the real limit of a path!).
> Since the value is picked arbitrarily anyway, could use something more
> independent (like 100K or something, which is large enough to be beyond
> absurd and small enough that a malloc isn't a big deal)?
>
> -Peff

I'm happy to set the limit to anything that makes everybody feel safe. I'll set it to 1MB to be on the safe side.

I'm not sure though how the code (in general) is supposed to keep working if a path can exceed PATH_MAX? A cursory search for PATH_MAX comes up with char array sizes and check-and-die kind of things. If a path is longer then surely we will be unable to handle it and abort in all sorts of places?

Are you only worried we might have a submodule with a too long path (that will create various other problems in different codepaths) that we may mistakenly clean (if it doesn't trigger any other abort earlier in the clean call chain) or do you want clean to keep working and do the right thing even in this case?

While digging around looking at this I also noticed that there is another problem I have overlooked previously.

read_gitfile_gently will call is_git_directory at the very end and it contains the following check at the very beginning:

    if (PATH_MAX <= len + strlen("/objects"))
        die("Too long path: %.*s", 60, suspect);

Now, this is good in the way that we will avoid mistakenly cleaning stuff because the path is too long but also bad because it makes read_gitfile_gently behave very ungently in this case.

I suspect I should make a gentle version of this also. The question is what to do in clean if the path is reported as too long? Abort? Avoid cleaning it to be safe? Ignore and clean it?

is_git_directory is also called from the new is_git_repository directly but here I think dying is ok since this path is a path in the working tree and if we can't handle the paths in the tree then there seem to be little point in trying to go on (as opposed to when some string in a file is too large for a path)

Thoughts?
/Erik
Previous: Johannes SchindelinNext: Junio C Hamano
Message 27 of 38 in “Improving performance of git clean”
  1. 0/5 Improving performance of git cleanErik Elfström, Apr 25, 2015
  2. 1/5 setup: add gentle version of read_gitfileErik Elfström, Apr 25, 2015
  3. Junio C HamanoApr 25, 2015
  4. Junio C HamanoApr 25, 2015
  5. 2/5 setup: sanity check file size in read_gitfile_gentlyErik Elfström, Apr 25, 2015
  6. Junio C HamanoApr 25, 2015
  7. Erik ElfströmApr 25, 2015
  8. Junio C HamanoApr 26, 2015
  9. 0/5 Improving performance of git cleanErik Elfström, Apr 26, 2015
  10. 1/5 setup: add gentle version of read_gitfileErik Elfström, Apr 26, 2015
  11. Jeff KingApr 28, 2015
  12. erik elfströmApr 28, 2015
  13. Jeff KingApr 28, 2015
  14. Jonathan NiederApr 28, 2015
  15. Jeff KingApr 28, 2015
  16. Jonathan NiederApr 28, 2015
  17. Jeff KingApr 28, 2015
  18. Jonathan NiederApr 28, 2015
  19. Junio C HamanoApr 28, 2015
  20. Stefan BellerApr 29, 2015
  21. Junio C HamanoApr 30, 2015
  22. 2/5 setup: sanity check file size in read_gitfile_gentlyErik Elfström, Apr 26, 2015
  23. Jeff KingApr 28, 2015
  24. Windows path limites, was Re: [PATCH v5 2/5] setup: sanity check file size in read_gitfile_gentlyJohannes Schindelin, Apr 28, 2015
  25. Doug KellyApr 28, 2015
  26. Johannes SchindelinApr 28, 2015
  27. erik elfströmApr 28, 2015
  28. Junio C HamanoApr 29, 2015
  29. 3/5 t7300: add tests to document behavior of clean and nested gitErik Elfström, Apr 26, 2015
  30. 4/5 p7300: add performance tests for cleanErik Elfström, Apr 26, 2015
  31. Jeff KingApr 28, 2015
  32. erik elfströmApr 28, 2015
  33. 5/5 clean: improve performance when removing lots of directoriesErik Elfström, Apr 26, 2015
  34. Jeff KingApr 28, 2015
  35. erik elfströmApr 28, 2015
  36. 3/5 t7300: add tests to document behavior of clean and nested gitErik Elfström, Apr 25, 2015
  37. 4/5 p7300: add performance tests for cleanErik Elfström, Apr 25, 2015
  38. 5/5 clean: improve performance when removing lots of directoriesErik Elfström, Apr 25, 2015

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.