From: Đoàn Trần Công Danh Date: Fri, 05 Aug 2022 07:52:15 GMT Subject: Re: [bug] Segfault in git commit when a hook has a broken shebang Message-ID: In-Reply-To: <30015309-00f1-9b44-023c-001ee3f242e4@0upti.me> On 2022-08-05 08:45:02+0300, Ilya K wrote: > Hello! I ran into a weird bug just now that is probably easier to show than > explain: > ❯ git init > Initialized empty Git repository in /home/k900/test/.git/ > ❯ echo '#!/usr/bin/oops' > .git/hooks/pre-commit > ❯ chmod +x .git/hooks/pre-commit > ❯ touch oops > ❯ git add oops > ❯ git commit -a > fatal: cannot run .git/hooks/pre-commit: No such file or directory > [1]    24580 segmentation fault (core dumped)  git commit -a > This happens consistently with git 2.37.x, and I don't think it happened > with git 2.36 or earlier. This seems to be a side-effect of a082345372, (hook API: fix v2.36.0 regression: hooks should be connected to a TTY, 2022-06-07) Since it makes hooks run in "ungroup" manner, hence run-command will pass NULL as first argument to notify_start_failure. This patch seems to fix the crash, however, I think we should remove that clause entirely. ---- 8< ------- hook.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hook.c b/hook.c index d113ee7faa..dc54a2ac67 100644 --- a/hook.c +++ b/hook.c @@ -84,8 +84,8 @@ static int notify_start_failure(struct strbuf *out, hook_cb->rc |= 1; - strbuf_addf(out, _("Couldn't start hook '%s'\n"), - hook_path); + fprintf(stderr, _("Couldn't start hook '%s'\n"), + hook_path); return 1; } ----- >8 -------------- -- Danh