aboutsummaryrefslogtreecommitdiffstats
path: root/gpg-interface.c
diff options
context:
space:
mode:
authorJiang Xin <worldhello.net@gmail.com>2021-11-04 08:34:15 +0800
committerJiang Xin <worldhello.net@gmail.com>2021-11-04 08:34:15 +0800
commitbbf1932c3085706a6a3bc8d7ba79e007ad7bda15 (patch)
tree4e14e8282070a6ee6d274343a44b78f8f7c112c8 /gpg-interface.c
parent66e6babac6c3698cdcb8944307a0d5ac21562ab0 (diff)
parent876b1423317071f43c99666f3fc3db3642dfbe14 (diff)
downloadgit-bbf1932c3085706a6a3bc8d7ba79e007ad7bda15.tar.gz
Merge branch 'master' of github.com:git/git
* 'master' of github.com:git/git: Git 2.34-rc1 rebase -i: fix rewording with --committer-date-is-author-date dir: fix directory-matching bug gpg-interface: avoid buffer overrun in parse_ssh_output() gpg-interface: handle missing " with " gracefully in parse_ssh_output() A few more topics before -rc1 i18n: fix typos found during l10n for git 2.34.0 t5310: drop lib-bundle.sh include format-patch (doc): clarify --base=auto gc: perform incremental repack when implictly enabled fsck: verify multi-pack-index when implictly enabled fsck: verify commit graph when implicitly enabled grep/pcre2: fix an edge case concerning ascii patterns and UTF-8 data commit-graph: don't consider "replace" objects with "verify" commit-graph tests: fix another graph_git_two_modes() helper commit-graph tests: fix error-hiding graph_git_two_modes() helper pretty: colorize pattern matches in commit messages grep: refactor next_match() and match_one_pattern() for external use
Diffstat (limited to 'gpg-interface.c')
-rw-r--r--gpg-interface.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/gpg-interface.c b/gpg-interface.c
index 800d8caa67..3e7255a2a9 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -387,10 +387,6 @@ static void parse_ssh_output(struct signature_check *sigc)
line = to_free = xmemdupz(sigc->output, strcspn(sigc->output, "\n"));
if (skip_prefix(line, "Good \"git\" signature for ", &line)) {
- /* Valid signature and known principal */
- sigc->result = 'G';
- sigc->trust_level = TRUST_FULLY;
-
/* Search for the last "with" to get the full principal */
principal = line;
do {
@@ -398,6 +394,12 @@ static void parse_ssh_output(struct signature_check *sigc)
if (search)
line = search + 1;
} while (search != NULL);
+ if (line == principal)
+ goto cleanup;
+
+ /* Valid signature and known principal */
+ sigc->result = 'G';
+ sigc->trust_level = TRUST_FULLY;
sigc->signer = xmemdupz(principal, line - principal - 1);
} else if (skip_prefix(line, "Good \"git\" signature with ", &line)) {
/* Valid signature, but key unknown */
@@ -407,9 +409,9 @@ static void parse_ssh_output(struct signature_check *sigc)
goto cleanup;
}
- key = strstr(line, "key");
+ key = strstr(line, "key ");
if (key) {
- sigc->fingerprint = xstrdup(strstr(line, "key") + 4);
+ sigc->fingerprint = xstrdup(strstr(line, "key ") + 4);
sigc->key = xstrdup(sigc->fingerprint);
} else {
/*
@@ -775,7 +777,7 @@ static const char *get_default_ssh_signing_key(void)
if (keys[0] && starts_with(keys[0]->buf, "ssh-")) {
default_key = strbuf_detach(keys[0], NULL);
} else {
- warning(_("gpg.ssh.defaultKeycommand succeeded but returned no keys: %s %s"),
+ warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
key_stderr.buf, key_stdout.buf);
}