diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-10-07 11:32:58 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-10-07 11:32:58 +0900 |
commit | 80693e3f09ab80cfe4a5a83467e765626ad0b15a (patch) | |
tree | 1100110f21941cbe7510a43d41c8121d59761030 /commit-graph.c | |
parent | Merge branch 'jt/cache-tree-avoid-lazy-fetch-during-merge' (diff) | |
parent | commit-graph.c: handle corrupt/missing trees (diff) | |
download | tgif-80693e3f09ab80cfe4a5a83467e765626ad0b15a.tar.xz |
Merge branch 'tb/commit-graph-harden'
The code to parse and use the commit-graph file has been made more
robust against corrupted input.
* tb/commit-graph-harden:
commit-graph.c: handle corrupt/missing trees
commit-graph.c: handle commit parsing errors
t/t5318: introduce failing 'git commit-graph write' tests
Diffstat (limited to 'commit-graph.c')
-rw-r--r-- | commit-graph.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/commit-graph.c b/commit-graph.c index c3ba79fe4e..6ae2009a96 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -846,12 +846,19 @@ static void write_graph_chunk_data(struct hashfile *f, int hash_len, while (list < last) { struct commit_list *parent; + struct object_id *tree; int edge_value; uint32_t packedDate[2]; display_progress(ctx->progress, ++ctx->progress_cnt); - parse_commit_no_graph(*list); - hashwrite(f, get_commit_tree_oid(*list)->hash, hash_len); + if (parse_commit_no_graph(*list)) + die(_("unable to parse commit %s"), + oid_to_hex(&(*list)->object.oid)); + tree = get_commit_tree_oid(*list); + if (!tree) + die(_("unable to get tree for %s"), + oid_to_hex(&(*list)->object.oid)); + hashwrite(f, tree->hash, hash_len); parent = (*list)->parents; |