Skip to content

Commit 2ab72a1

Browse files
cloobTechgitster
authored andcommitted
gpg-interface: do not use misdesigned strbuf_split*()
In get_default_ssh_signing_key(), the default ssh signing key is retrieved in `key_stdout` buf, which is then split using strbuf_split_max() into up to two strbufs at a new line and the first strbuf is returned as a `char *`and not a strbuf. This makes the function lack the use of strbuf API as no edits are performed on the split tokens. Simplify the process of retrieving and returning the desired line by using strchr() to isolate the line and xmemdupz() to return a copy of the line. This removes the roundabout way of splitting the string into strbufs, just to return the line. Reported-by: Junio Hamano <gitster@pobox.com> Helped-by: Christian Couder <christian.couder@gmail.com> Helped-by: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com> Signed-off-by: Olamide Caleb Bello <belkid98@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent bee1bdd commit 2ab72a1

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

gpg-interface.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -865,12 +865,12 @@ static char *get_default_ssh_signing_key(void)
865865
struct child_process ssh_default_key = CHILD_PROCESS_INIT;
866866
int ret = -1;
867867
struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
868-
struct strbuf **keys;
869868
char *key_command = NULL;
870869
const char **argv;
871870
int n;
872871
char *default_key = NULL;
873872
const char *literal_key = NULL;
873+
char *begin, *new_line, *first_line;
874874

875875
if (!ssh_default_key_command)
876876
die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
@@ -887,19 +887,24 @@ static char *get_default_ssh_signing_key(void)
887887
&key_stderr, 0);
888888

889889
if (!ret) {
890-
keys = strbuf_split_max(&key_stdout, '\n', 2);
891-
if (keys[0] && is_literal_ssh_key(keys[0]->buf, &literal_key)) {
890+
begin = key_stdout.buf;
891+
new_line = strchr(begin, '\n');
892+
if (new_line)
893+
first_line = xmemdupz(begin, new_line - begin);
894+
else
895+
first_line = xstrdup(begin);
896+
if (is_literal_ssh_key(first_line, &literal_key)) {
892897
/*
893898
* We only use `is_literal_ssh_key` here to check validity
894899
* The prefix will be stripped when the key is used.
895900
*/
896-
default_key = strbuf_detach(keys[0], NULL);
901+
default_key = first_line;
897902
} else {
903+
free(first_line);
898904
warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
899905
key_stderr.buf, key_stdout.buf);
900906
}
901907

902-
strbuf_list_free(keys);
903908
} else {
904909
warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
905910
key_stderr.buf, key_stdout.buf);

0 commit comments

Comments
 (0)