Skip to content

Commit 22e5ae5

Browse files
peffgitster
authored andcommitted
connect.c: handle errors from split_cmdline
Commit e9d9a8a (connect: handle putty/plink also in GIT_SSH_COMMAND, 2017-01-02) added a call to split_cmdline(), but checks only for a non-zero return to see if we got any output. Since the function returns negative values (and a NULL argv) on error, we end up dereferencing NULL and segfaulting. Arguably we could report on the parsing error here, but it's probably not worth it. This is a best-effort attempt to see if we are using plink. So we can simply return here with "no, it wasn't plink" and let the shell actually complain about the bogus quoting. Reported-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 486c8e8 commit 22e5ae5

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

connect.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline,
730730
const char **ssh_argv;
731731

732732
p = xstrdup(ssh_command);
733-
if (split_cmdline(p, &ssh_argv)) {
733+
if (split_cmdline(p, &ssh_argv) > 0) {
734734
variant = basename((char *)ssh_argv[0]);
735735
/*
736736
* At this point, variant points into the buffer

t/t5601-clone.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,12 @@ test_expect_success 'GIT_SSH_VARIANT overrides plink to tortoiseplink' '
427427
expect_ssh "-batch -P 123" myhost src
428428
'
429429

430+
test_expect_success 'clean failure on broken quoting' '
431+
test_must_fail \
432+
env GIT_SSH_COMMAND="${SQ}plink.exe -v" \
433+
git clone "[myhost:123]:src" sq-failure
434+
'
435+
430436
# Reset the GIT_SSH environment variable for clone tests.
431437
setup_ssh_wrapper
432438

0 commit comments

Comments
 (0)