On Fri, Jan 03, 2025 at 11:28:47AM -0800, Wink Saville wrote: > `git diff-tree --cc` SEGFAUTs after adding trace_printf to diff_tree_combined. Hmm, is it really a bug in Git if you had to add new code which contains the bug? :) > @@ -1595,8 +1597,16 @@ void diff_tree_combined(const struct object_id *oid, > } > > /* find out number of surviving paths */ > - for (num_paths = 0, p = paths; p; p = p->next) > + trace_printf("Wink diff_tree_combined: find number of surviving paths num_parent=%d\n", num_parent); > + for (num_paths = 0, p = paths; p; p = p->next) { > + trace_printf("Wink diff_tree_combined: num_paths=%d &p=%p mode=%0x, oid=%s path=%s\n", num_paths, p, p->mode, oid_to_hex(&p->oid), p->path); > + for (i = 0; i < num_parent; i++) { > + trace_printf("Wink diff_tree_combined: &p->parent[%d]=%p status=%c mode=%x oid=%s path.buf=%p contents path.buf=%s\n", > + i, &p->parent[i], p->parent[i].status, p->parent[i].mode, oid_to_hex(&p->parent[i].oid), p->parent[i].path.buf, p->parent[i].path.buf); > + } The parent "path" strbufs are only initialized in intersect_paths() if combined_all_paths is set, and if there was an actual path change (a copy or rename). So you'd probably need something like this: diff --git a/combine-diff.c b/combine-diff.c index 455bc19087..1e58809c4e 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1601,8 +1601,11 @@ void diff_tree_combined(const struct object_id *oid, for (num_paths = 0, p = paths; p; p = p->next) { trace_printf("Wink diff_tree_combined: num_paths=%d &p=%p mode=%0x, oid=%s path=%s\n", num_paths, p, p->mode, oid_to_hex(&p->oid), p->path); for (i = 0; i < num_parent; i++) { + const char *path = rev->combine_all_paths && + filename_changed(p->parent[i].status) ? + p->parent[i].path.buf : NULL; trace_printf("Wink diff_tree_combined: &p->parent[%d]=%p status=%c mode=%x oid=%s path.buf=%p contents path.buf=%s\n", - i, &p->parent[i], p->parent[i].status, p->parent[i].mode, oid_to_hex(&p->parent[i].oid), p->parent[i].path.buf, p->parent[i].path.buf); + i, &p->parent[i], p->parent[i].status, p->parent[i].mode, oid_to_hex(&p->parent[i].oid), path, path); } num_paths++; } -Peff