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

Re: Bug encountered while comitting

From
MKMatthias Kestenholz <lists@irregular.ch>
Date
Mar 25, 2006, 01:15 UTC
Message-ID
<20060325011527.GA23600@spinlock.ch>
In-Reply-To
<7vacbfzc3u.fsf@assigned-by-dhcp.cox.net>
* Junio C Hamano (junkio@cox.net) wrote:
Show 18 quoted lines
> Matthias Kestenholz <lists@irregular.ch> writes:
> 
> > The PHP script created directories under .git/objects which were
> > only writable by www-data. There were other directories which were
> > owned by user mk and group www-data, and they were group writable.
> >
> > So, I had write access to only a part of the .git directory.
> 
> core.sharedrepository perhaps?
> 
> While it probably is not a good idea to have you in www-data, it
> appears that is essentially you will end up doing, because PHP
> scripts that may _create_ new directories better not to have
> privilege to give newly created directories away to you (busting
> your quota), so they will be owned by www-data.www-data and for
> you to be able to write into it you either need to be www-data
> user or in www-data group, with core.sharedrepostiory set.
> 

Thanks for your answer; I did not know about this option (I should probably re-read all the docs).

Anyway, I think git should never corrupt a repository, even if it does not have the write permissions it needs.

The following commands were sufficient to create a corrupt repository with git (v1.2.4-1, debian package):

$ git-init-db $ echo test > file $ git-update-index --add file ; git commit -m 'message'

repeat (f.e. 10 times): $ echo test >> file $ git-update-index file ; git commit -m 'message'

$ sudo chown root .git/objects/*

repeat the modification and commit commands until you get a message similar to the following:

unable to write sha1 filename .git/objects/90/b33..: Permission denied fatal: 90b33... is not a valid 'tree' object unable to write sha1 filename .git/objects/ba/fe4..: Permission denied error: file: failed to insert into database fatal: Unable to process file file etc...

The result of this all is: refs/heads/master might now point to a non-existant commit object. Every git command now errors out with:

fatal: bad tree object HEAD

and git-log shows no output (probably since it does not find a commit to begin with)

git-commit should abort as soon as it encounters an error and not update HEAD.

Thanks, Matthias

(Note: To find the last valid commit object, I could just scan the objects directory for the recently modified files and write the sha1 value to refs/heads/master, so I had no data loss.)

-- 
:wq
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 7 in “Bug encountered while comitting”
  1. Matthias KestenholzMar 24, 2006
  2. Andreas EricssonMar 24, 2006
  3. Matthias KestenholzMar 25, 2006
  4. Junio C HamanoMar 24, 2006
  5. Matthias KestenholzMar 25, 2006
  6. Junio C HamanoMar 25, 2006
  7. Matthias KestenholzMar 25, 2006

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.