Skip to content

Commit

Permalink
commit: fix a segfault when displaying a commit with unreachable parents
Browse files Browse the repository at this point in the history
I was running git show on various commits found by fsck-objects
when I found this bug.  Since find_unique_abbrev() cannot find
an abbreviation for an object not in the database, it will
return NULL, which is bad to run strlen() on.  So instead, we'll
just display the unabbreviated sha1 that we referenced in the
commit.

I'm not sure that this is the best 'fix' for it because the
commit I was trying to show was broken, but I don't think a
program should segfault even if the user tries to do something
stupid.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Eric Wong authored and Junio C Hamano committed Oct 12, 2006
1 parent b203b76 commit 14763e7
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -548,10 +548,13 @@ static int add_merge_info(enum cmit_fmt fmt, char *buf, const struct commit *com

while (parent) {
struct commit *p = parent->item;
const char *hex = abbrev
? find_unique_abbrev(p->object.sha1, abbrev)
: sha1_to_hex(p->object.sha1);
const char *dots = (abbrev && strlen(hex) != 40) ? "..." : "";
const char *hex = NULL;
const char *dots;
if (abbrev)
hex = find_unique_abbrev(p->object.sha1, abbrev);
if (!hex)
hex = sha1_to_hex(p->object.sha1);
dots = (abbrev && strlen(hex) != 40) ? "..." : "";
parent = parent->next;

offset += sprintf(buf + offset, " %s%s", hex, dots);
Expand Down

0 comments on commit 14763e7

Please sign in to comment.