On Tue, Nov 15 2022, Johannes Schindelin via GitGitGadget wrote: > + if (starts_with(line, "diff --git ")) { > + struct patch patch = { 0 }; > + struct strbuf root = STRBUF_INIT; > + int linenr = 0; > + int orig_len; > + > + state = MBOX_IN_DIFF; > + old_count = new_count = 0; > + strbuf_addch(&buf, '\n'); > + if (!util->diff_offset) > + util->diff_offset = buf.len; > + line[len - 1] = '\n'; > + orig_len = len; > + len = parse_git_diff_header(&root, &linenr, 1, line, > + len, size, &patch); Try this with SANITIZE=leak, e.g. this seems to fix 1/4 leaks that pop up if you try the command noted in the patch: diff --git a/range-diff.c b/range-diff.c index 77fa9b970b1..7ff33f92e39 100644 --- a/range-diff.c +++ b/range-diff.c @@ -142,6 +142,7 @@ static int read_mbox(const char *path, struct string_list *list) orig_len = len; len = parse_git_diff_header(&root, &linenr, 1, line, len, size, &patch); + free(patch.def_name); if (len < 0) { error(_("could not parse git header '%.*s'"), orig_len, line); Maybe it really should segfault, I didn't check carefully, but your test passes with SANITIZE=address with this, so if so it's missing coverage...