If lookup_commit() returns NULL, there's usually serious error and the command aborts anyway. However it's still nicer to have a message telling us where it aborts, rather than segmentation fault. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- I suppose die() also cleans up $GIT_DIR/index.lock while sigsegv does not. builtin/commit.c | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 2088b6b..bfb7a5a 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1387,6 +1387,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) unsigned char commit_sha1[20]; struct ref_lock *ref_lock; struct commit_list *parents = NULL, **pptr = &parents; + struct commit *commit; struct stat statbuf; int allow_fast_forward = 1; struct wt_status s; @@ -1423,7 +1424,6 @@ int cmd_commit(int argc, const char **argv, const char *prefix) reflog_msg = "commit (initial)"; } else if (amend) { struct commit_list *c; - struct commit *commit; if (!reflog_msg) reflog_msg = "commit (amend)"; @@ -1439,7 +1439,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (!reflog_msg) reflog_msg = "commit (merge)"; - pptr = &commit_list_insert(lookup_commit(head_sha1), pptr)->next; + commit = lookup_commit(head_sha1); + if (!commit) + die(_("could not parse HEAD commit")); + pptr = &commit_list_insert(commit, pptr)->next; fp = fopen(git_path("MERGE_HEAD"), "r"); if (fp == NULL) die_errno(_("could not open '%s' for reading"), @@ -1448,7 +1451,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix) unsigned char sha1[20]; if (get_sha1_hex(m.buf, sha1) < 0) die(_("Corrupt MERGE_HEAD file (%s)"), m.buf); - pptr = &commit_list_insert(lookup_commit(sha1), pptr)->next; + commit = lookup_commit(sha1); + if (!commit) + die(_("could not parse commit %s"), sha1_to_hex(sha1)); + pptr = &commit_list_insert(commit, pptr)->next; } fclose(fp); strbuf_release(&m); @@ -1465,7 +1471,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix) reflog_msg = (whence == FROM_CHERRY_PICK) ? "commit (cherry-pick)" : "commit"; - pptr = &commit_list_insert(lookup_commit(head_sha1), pptr)->next; + commit = lookup_commit(head_sha1); + if (!commit) + die(_("could not parse HEAD commit")); + pptr = &commit_list_insert(commit, pptr)->next; } /* Finally, get the commit message */ -- 1.7.4.74.g639db -- 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