Re: My git repo is broken, how to fix it ?
- From
Linus Torvalds <torvalds@linux-foundation.org>
- Date
- Mar 22, 2007, 16:48 UTC
- Message-ID
- <Pine.LNX.4.64.0703220931120.6730@woody.linux-foundation.org>
- In-Reply-To
- <Pine.LNX.4.64.0703220924590.6730@woody.linux-foundation.org>
On Thu, 22 Mar 2007, Linus Torvalds wrote:
> > Yeehaa! I think I'm on the right trail.
.. and the reason only Alexander sees it, and nobody else does, is that this one is a bug in the CR/LF creation.
Junio: I think it's your git-apply commit 67160271.
In "try_create_file()", we do:
...
if (convert_to_working_tree(path, &nbuf, &nsize)) {
free((char *) buf);
buf = nbuf;
size = nsize;
}
...but the thing is, the *caller* still uses the old "buf/nsize", so when you free it, the caller will now use the free'd data structure, and if it gets re-used by - for example - the zlib deflate() buffers, you'll get a corrupt object (if it gets re-used *before*, you'll get the *wrong* object!). Exactly Alexander's patterns.
Alexander - sorry for all the trouble, this was definitely our bad.
I think the easy temporary fix is to just remove that "free()" and leak a bit of memory. That gets it through that test with efence for me.
Does that fix it for you, Alexander?
I can't really say whether there are other problems too - electric fence has a few bugs in that it considers zero-length allocations to be "probably a bug" and aborts. This makes some of the tests fail with efence, when re_compile_internal wants to allocate a zero-length object.
(It also writes crap to stderr, which could make others fail, I didn't check).
Linus