diff options
author | Enzo Matsumiya <ematsumiya@suse.de> | 2021-11-24 21:02:39 -0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-11-24 16:14:10 -0800 |
commit | f917f57f40a22b64ab5354e99dbf32bb48d9fc0a (patch) | |
tree | a07ad0bc547c38dde56e6a32118db6696cd680bd /t/t4139-apply-escape.sh | |
parent | Git 2.34.1 (diff) | |
download | tgif-f917f57f40a22b64ab5354e99dbf32bb48d9fc0a.tar.xz |
pager: fix crash when pager program doesn't exist
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@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4139-apply-escape.sh')
0 files changed, 0 insertions, 0 deletions