On Thu, Jan 24, 2013 at 9:06 PM, Stefan Näwe <stefan.naewe@xxxxxxxxxxxxxxxxxxxx> wrote: > Am Donnerstag, 24. Januar 2013 14:40:47 schrieb Duy Nguyen: >> On Thu, Jan 24, 2013 at 7:11 PM, Stefan Näwe >> <stefan.naewe@xxxxxxxxxxxxxxxxxxxx> wrote: >>>> Does it fail with older versions of git? If so, can you bisect? >>> >>> I did. My bisection told me this is the suspect: >>> >>> ccdc603 (parse_object: try internal cache before reading object db) >> >> diff --git a/object.c b/object.c >> index d8d09f9..6b06297 100644 >> --- a/object.c >> +++ b/object.c >> @@ -191,10 +191,15 @@ struct object *parse_object(const unsigned char *sha1) >> enum object_type type; >> int eaten; >> const unsigned char *repl = lookup_replace_object(sha1); >> - void *buffer = read_sha1_file(sha1, &type, &size); >> + void *buffer; >> + struct object *obj; >> + >> + obj = lookup_object(sha1); >> + if (obj && obj->parsed) >> + return obj; >> >> Any chance obj->parsed is 1 but ((struct commit*)obj)->buffer is NULL? >> What if you change that "if" to >> >> if (obj && obj->parsed && (obj->type != OBJ_COMMIT || ((struct commit >> *)obj)->buffer)) >> > > No more segfault! Sweet. I have no idea how that fixes it. Maybe Jeff can give some explanation after he wakes up. -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html