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

A little mystery - crash caused by empty commit message.

From
Tor Arvid Lund <torarvid@gmail.com>
Date
Feb 10, 2009, 11:15 UTC
Message-ID
<1a6be5fa0902100315q554dc457j8c8476d3f59a314f@mail.gmail.com>
Hi, all.

So - I started noticing a problem where for instance "git log" or "git branch -av" would crash in one of my repositories. My environment is Windows Vista x64, using msysgit. I have compiled several versions of git, but I think I had version 1.6.0.3 then this problem arose. When the crash occurred, Windows would just pop up a dialog window saying "git.exe has stopped working". So I tried running it with gdb, which told me there was a segfault in strchr() but no more. Git is built with debug symbols (-g), so I am guessing this may be a problem with my msysgit environment (maybe in conjunction with 64-bit Vista) or something. But I don't really know what I'm talking about, and it is another topic anyway...

Then I tried copying the repository to a linux box and tried gdb there. Much better. strchr(line, '\n') is called in pretty.c in the get_header function. For one of the commits, the 'line' parameter was NULL, so I managed to make it not crash with this little patch:

diff --git a/pretty.c b/pretty.c
index 8d4dbc9..1b2d097 100644
--- a/pretty.c
+++ b/pretty.c
@@ -230,6 +230,8 @@ static char *get_header(const struct commit
*commit, const char *key)
       const char *line = commit->buffer;

       for (;;) {
+               if (line == NULL)
+                       return NULL;
               const char *eol = strchr(line, '\n'), *next;

               if (line == eol)



The result from "git log" for me is then:

...
commit 6a1ac5bc05b2cdd276c7f8a39565681f9d8017d7
<normal output>

commit f67f77edf06bbcebabf430735c751245a4b70f14
Author: Tor Arvid Lund <toral@qsystems.no>
Date:   Thu Feb 5 17:47:09 2009 +0100

commit 6d109492008c68d28af821b96b82f807f338caf6
<normal output>
...

That is - a handful of commits that are output "normally", followed by
one commit where the message is just blank, and then more "normal"
output... By the way - I tried running git fsck --full --strict, and
it did not report any errors (just the "common" list of dangling blobs
and such...

But the question is then - how did I manage to get my repository in
this state? The commit in question was made by me - I know I entered a
message when I committed it. I can even find the commit *with* the
original commit message in another branch... I am sorry to say that my
memory fails me, so I cannot remember all the times I may have moved
commits around, rebased, etc. I do such things often, as I use git-p4
to communicate with the "official company repo" (and because its so
nice :)). I don't know the core git code well, but when I'm in the
mood for speculation, I feel like a rebase or a cherry-pick must have
been the reason for this to have happened...

Well - I just thought I should tell you all about it. My simple little
patch makes it "not crash", but it should maybe report an error or
warning to the user - as something is most likely wrong somewhere.

-Tor Arvid-
Next: Jeff King
Message 1 of 6 in “A little mystery - crash caused by empty commit message.”
  1. Tor Arvid LundFeb 10, 2009
  2. Jeff KingFeb 10, 2009
  3. Johannes SixtFeb 10, 2009
  4. Tor Arvid LundFeb 10, 2009
  5. Jeff KingFeb 10, 2009
  6. Tor Arvid LundFeb 16, 2009

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.