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@suse.de/ (local)
2. https://lore.kernel.org/git/YT6BnnXeAWn8BycF@coredump.intra.peff.net/ (local)
Æ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