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

Re: Files with colons under Cygwin

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Oct 7, 2008, 00:53 UTC
Message-ID
<20081007005327.GT21650@dpotapov.dyndns.org>
In-Reply-To
<48E9B634.6040909@viscovery.net>
On Mon, Oct 06, 2008 at 08:54:44AM +0200, Johannes Sixt wrote:
> 
> IIUC, verify_path() checks paths that were found in the database or the
> index.

It also checks paths that was given to git add and other commands to prevent an invalid path to enter to the index. If I am not mistaken, if invalid path has entered in the index then it will be committed to the database without any further checks.

> As such, it checks for the integrity of the database. And paths
> with backslashes or colons certainly do not violate the database integrity.

No, it has nothing to do with the database. You can run git fsck --full on a repository that contains '..' or '.' or '.git', and there will be no error. Having those names does not violate the database integrity, as the database is concerned all names are just bytes separated by '/', so having name '.' is not a problem for it. However, names '.' and '..' have special meaning for the filesystem, and paths starting with .git/ have special meaning for Git repository. If you work in a bare repo then those names are not a problem, but once you have a working tree, you want make sure that there is nothing wrong with it.

Show 10 quoted lines
> 
> More precisely, the exchange of path names between the index and tree
> objects (both directions) should not do this new check, nor if a path is
> added to the index. The check is only meaningful[*] when a path is read
> from the index or a tree object and "applied" to the working directory.
> Unfortunately, I think there are lots of places where this happens.
> 
> [*] I say "meaningful" and not "necessary" because the situation is just
> like when you grab some random SoftwarePackage.tar.gz, and run ./configure
> without looking first what it is going to do.

When I grab any tar, I can look at its context without myself of any risk that some files can be overwritten on my file system. And when I want to look at some remote git repository, I usually do:

   git clone URL
If it can overwrite some files behind my back, it is security a hole.

BTW, it was the reason why the idea of allowing .gitconfig to be stored in git repository (similar to .gitignore) was stroke down about a year ago though it could help some clueless users...

On Linux (or other sane file systems), we have all required checks to prevent that from happening, and they are places in verify_path, which prevents malicious names entering into the index and thus to the file system too. So, we should do all required checks on Windows too.

Now, I've realized that my checks were not sufficient (due to Windows being case-insensitive), so I will add more checks and resend this patch later.

Dmitry
Previous: Johannes SixtNext: Johannes Sixt
Message 8 of 19 in “Files with colons under Cygwin”
  1. Giovanni FunchalOct 2, 2008
  2. Dmitry PotapovOct 4, 2008
  3. Alex RiesenOct 5, 2008
  4. Alex RiesenOct 5, 2008
  5. Dmitry PotapovOct 5, 2008
  6. Giovanni FunchalOct 5, 2008
  7. Johannes SixtOct 6, 2008
  8. Dmitry PotapovOct 7, 2008
  9. Johannes SixtOct 7, 2008
  10. Joshua JuranOct 7, 2008
  11. correct verify_path for WindowsDmitry Potapov, Oct 7, 2008
  12. Johannes SixtOct 7, 2008
  13. Dmitry PotapovOct 11, 2008
  14. Alex RiesenOct 11, 2008
  15. Dmitry PotapovOct 12, 2008
  16. Alex RiesenOct 12, 2008
  17. Johannes SixtOct 13, 2008
  18. Alex RiesenOct 13, 2008
  19. Alex RiesenOct 7, 2008

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.