Skip to content

Commit bee1bdd

Browse files
cloobTechgitster
authored andcommitted
gpg-interface: do not use misdesigned strbuf_split*()
In get_ssh_finger_print(), the output of the `ssh-keygen` command is put into `fingerprint_stdout` strbuf. The string in `fingerprint_stdout` is then split into up to 3 strbufs using strbuf_split_max(). However they are not modified after the split thereby not making use of the strbuf API as the fingerprint token is merely returned as a char * and not a strbuf. Hence they do not need to be strbufs. Simplify the process of retrieving and returning the desired token by using strchr() to isolate the token and xmemdupz() to return a copy of the token. This removes the roundabout way of splitting the string into strbufs just to return the token. 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 81f86aa commit bee1bdd

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

gpg-interface.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -821,8 +821,7 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
821821
struct child_process ssh_keygen = CHILD_PROCESS_INIT;
822822
int ret = -1;
823823
struct strbuf fingerprint_stdout = STRBUF_INIT;
824-
struct strbuf **fingerprint;
825-
char *fingerprint_ret;
824+
char *fingerprint_ret, *begin, *delim;
826825
const char *literal_key = NULL;
827826

828827
/*
@@ -845,13 +844,17 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
845844
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
846845
signing_key);
847846

848-
fingerprint = strbuf_split_max(&fingerprint_stdout, ' ', 3);
849-
if (!fingerprint[1])
850-
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
847+
begin = fingerprint_stdout.buf;
848+
delim = strchr(begin, ' ');
849+
if (!delim)
850+
die(_("failed to get the ssh fingerprint for key %s"),
851851
signing_key);
852-
853-
fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
854-
strbuf_list_free(fingerprint);
852+
begin = delim + 1;
853+
delim = strchr(begin, ' ');
854+
if (!delim)
855+
die(_("failed to get the ssh fingerprint for key %s"),
856+
signing_key);
857+
fingerprint_ret = xmemdupz(begin, delim - begin);
855858
strbuf_release(&fingerprint_stdout);
856859
return fingerprint_ret;
857860
}

0 commit comments

Comments
 (0)