This series is an alternate but more thorough way to solve the pager segfault reported by Enzo Matsumiya[1], and more generally avoids similar issues in the future. That the run-command API exposed two subtly different ways of doing the same thing wouldn't only lead to the sort of bug reported in [1], but also made memory management around it rather painful. As noted by Jeff King in[2]: I'd like to eventually get rid of the argv interface entirely because it has memory-ownership semantics that are easy to get wrong. There's probably never going to be a perfect time to do this as a change to this widely used API will probably impact things in-flight. Now seems to be a particularly good time though, merging this to "seen" only conflicts with my ab/config-based-hooks-2 in builtin/worktree.c. The resolution is trivial (just use the new hook API added in that topic). Since this series removes the "argv" member we're not going to have any semantic conflicts that aren't obvious as a compile-time error (and merging with seen both compiles & passes all tests). As noted in 5/5 we've still got a similar issue with "env" and "env_array". I've got a follow-up series that similarly removes "env" which we can do at some point (it's much smaller than this one), but for now let's focus on "argv". 1. https://lore.kernel.org/git/20211120194048.12125-1-ematsumiya@xxxxxxx/ 2. https://lore.kernel.org/git/YT6BnnXeAWn8BycF@xxxxxxxxxxxxxxxxxxxxxxx/ Ævar Arnfjörð Bjarmason (5): archive-tar: use our own cmd.buf in error message upload-archive: use regular "struct child_process" pattern run-command API users: use strvec_pushv(), not argv assignment run-command API users: use strvec_pushl(), not argv construction run-command API: remove "argv" member, always use "args" add-patch.c | 4 +-- archive-tar.c | 9 +++---- builtin/add.c | 6 +---- builtin/fsck.c | 12 +++------ builtin/help.c | 3 +-- builtin/merge.c | 3 +-- builtin/notes.c | 2 +- builtin/receive-pack.c | 16 +++++------ builtin/replace.c | 3 +-- builtin/upload-archive.c | 5 +++- builtin/worktree.c | 2 -- daemon.c | 17 +++--------- diff.c | 7 +---- editor.c | 2 +- http-backend.c | 2 +- http.c | 5 ++-- prompt.c | 7 +---- remote-curl.c | 2 +- run-command.c | 53 ++++++++++++++++++++----------------- run-command.h | 20 ++++++-------- sequencer.c | 2 +- sub-process.c | 2 +- t/helper/test-run-command.c | 10 ++++--- t/helper/test-subprocess.c | 2 +- t/t7006-pager.sh | 4 +++ trace2/tr2_tgt_event.c | 2 +- trace2/tr2_tgt_normal.c | 2 +- trace2/tr2_tgt_perf.c | 4 +-- transport.c | 2 +- upload-pack.c | 5 +--- 30 files changed, 94 insertions(+), 121 deletions(-) -- 2.34.0.822.gb876f875f1b