Skip to content

Commit f4fd906

Browse files
committed
Merge branch 're/ssh-sign-buffer-fix'
Tempfile removal fix in the codepath to sign commits with SSH keys. * re/ssh-sign-buffer-fix: ssh signing: don't detach the filename strbuf from key_file tempfile
2 parents 69ea767 + 4498127 commit f4fd906

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

gpg-interface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,7 +1048,7 @@ static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature,
10481048
key_file->filename.buf);
10491049
goto out;
10501050
}
1051-
ssh_signing_key_file = strbuf_detach(&key_file->filename, NULL);
1051+
ssh_signing_key_file = xstrdup(key_file->filename.buf);
10521052
} else {
10531053
/* We assume a file */
10541054
ssh_signing_key_file = interpolate_path(signing_key, 1);

t/t7528-signed-commit-ssh.sh

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,26 @@ test_expect_success GPGSSH 'sign commits using literal public keys with ssh-agen
8484
test_config gpg.format ssh &&
8585
eval $(ssh-agent) &&
8686
test_when_finished "kill ${SSH_AGENT_PID}" &&
87-
ssh-add "${GPGSSH_KEY_PRIMARY}" &&
88-
echo 1 >file && git add file &&
89-
git commit -a -m rsa-inline -S"$(cat "${GPGSSH_KEY_PRIMARY}.pub")" &&
90-
echo 2 >file &&
91-
test_config user.signingkey "$(cat "${GPGSSH_KEY_PRIMARY}.pub")" &&
92-
git commit -a -m rsa-config -S &&
93-
ssh-add "${GPGSSH_KEY_ECDSA}" &&
94-
echo 3 >file &&
95-
git commit -a -m ecdsa-inline -S"key::$(cat "${GPGSSH_KEY_ECDSA}.pub")" &&
96-
echo 4 >file &&
97-
test_config user.signingkey "key::$(cat "${GPGSSH_KEY_ECDSA}.pub")" &&
98-
git commit -a -m ecdsa-config -S
87+
test_when_finished "test_unconfig user.signingkey" &&
88+
mkdir tmpdir &&
89+
TMPDIR="$(pwd)/tmpdir" &&
90+
(
91+
export TMPDIR &&
92+
ssh-add "${GPGSSH_KEY_PRIMARY}" &&
93+
echo 1 >file && git add file &&
94+
git commit -a -m rsa-inline -S"$(cat "${GPGSSH_KEY_PRIMARY}.pub")" &&
95+
echo 2 >file &&
96+
git config user.signingkey "$(cat "${GPGSSH_KEY_PRIMARY}.pub")" &&
97+
git commit -a -m rsa-config -S &&
98+
ssh-add "${GPGSSH_KEY_ECDSA}" &&
99+
echo 3 >file &&
100+
git commit -a -m ecdsa-inline -S"key::$(cat "${GPGSSH_KEY_ECDSA}.pub")" &&
101+
echo 4 >file &&
102+
git config user.signingkey "key::$(cat "${GPGSSH_KEY_ECDSA}.pub")" &&
103+
git commit -a -m ecdsa-config -S
104+
) &&
105+
find tmpdir -type f >tmpfiles &&
106+
test_must_be_empty tmpfiles
99107
'
100108

101109
test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'create signed commits with keys having defined lifetimes' '

0 commit comments

Comments
 (0)