Enzo Matsumiya <ematsumiya@xxxxxxx> writes: > When prepare_cmd() fails for, e.g., pager process setup, > child_process_clear() frees the memory in pager_process.args, but .argv > was pointed to pager_process.args.v earlier in start_command(), so it's > now a dangling pointer. > > setup_pager() is then called a second time, from cmd_log_init_finish() > in this case, and any further operations using its .argv, e.g. strvec_*, > will use the dangling pointer and eventually crash. According to trivial > tests, setup_pager() is not called twice if the first call is > successful. > > This patch makes sure that pager_process is properly initialized on > setup_pager(). Drop CHILD_PROCESS_INIT from its declaration since it's > no longer really necessary. > > Add a test to catch possible regressions. > > Reproducer: > $ git config pager.show INVALID_PAGER > $ git show $VALID_COMMIT > error: cannot run INVALID_PAGER: No such file or directory > [1] 3619 segmentation fault (core dumped) git show $VALID_COMMIT > > Signed-off-by: Enzo Matsumiya <ematsumiya@xxxxxxx> > --- > Changes to v3: > - change test description, as per Eric's suggestion > - drop CHILD_PROCESS_INIT, as per Jeff's suggestion Thanks. Everything looks good. Will queue.