git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[Outreachy PATCH v4 2/2] gpg-interface: do not use misdesigned strbuf_split*() [Part 2]

From
Olamide Caleb Bello <belkid98@gmail.com>
Date
Oct 20, 2025, 22:55 UTC
Message-ID
<a830de15ecdb5e5f45625927cb69b2be552bda42.1760997183.git.belkid98@gmail.com>
In-Reply-To
<cover.1760997183.git.belkid98@gmail.com>

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: Junio Hamano <gitster@pobox.com>
Helped-by: Krisoffer Haughsbakk
Signed-off-by: Olamide Caleb Bello <belkid98@gmail.com>
---
 gpg-interface.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/gpg-interface.c b/gpg-interface.c
index 1d793a56d2..420e3a6646 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -865,12 +865,12 @@ static char *get_default_ssh_signing_key(void)
 	struct child_process ssh_default_key = CHILD_PROCESS_INIT;
 	int ret = -1;
 	struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
-	struct strbuf **keys;
 	char *key_command = NULL;
 	const char **argv;
 	int n;
 	char *default_key = NULL;
 	const char *literal_key = NULL;
+	char *begin, *new_line, *first_line;
 
 	if (!ssh_default_key_command)
 		die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
@@ -887,19 +887,21 @@ static char *get_default_ssh_signing_key(void)
 			   &key_stderr, 0);
 
 	if (!ret) {
-		keys = strbuf_split_max(&key_stdout, '\n', 2);
-		if (keys[0] && is_literal_ssh_key(keys[0]->buf, &literal_key)) {
+		begin = key_stdout.buf;
+		new_line = strchr(begin, '\n');
+		first_line = xmemdupz(begin, new_line - begin);
+		if (is_literal_ssh_key(first_line, &literal_key)) {
 			/*
 			 * We only use `is_literal_ssh_key` here to check validity
 			 * The prefix will be stripped when the key is used.
 			 */
-			default_key = strbuf_detach(keys[0], NULL);
+			default_key = first_line;
 		} else {
+			free(first_line);
 			warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
 				key_stderr.buf, key_stdout.buf);
 		}
 
-		strbuf_list_free(keys);
 	} else {
 		warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
 			key_stderr.buf, key_stdout.buf);
-- 
2.51.0.463.g79cf913ea9
Previous: Junio C HamanoNext: Christian Couder
Message 7 of 26 in “do not use strbuf_split*()”
  1. 0/2 do not use strbuf_split*()Olamide Caleb Bello, Oct 20, 2025
  2. 1/2 gpg-interface: do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 20, 2025
  3. Christian CouderOct 21, 2025
  4. Christian CouderOct 21, 2025
  5. Bello OlamideOct 21, 2025
  6. Junio C HamanoOct 21, 2025
  7. 2/2 gpg-interface: do not use misdesigned strbuf_split*() [Part 2]Olamide Caleb Bello, Oct 20, 2025
  8. Christian CouderOct 21, 2025
  9. Bello OlamideOct 21, 2025
  10. Christian CouderOct 21, 2025
  11. Bello OlamideOct 21, 2025
  12. Junio C HamanoOct 21, 2025
  13. Bello OlamideOct 22, 2025
  14. 0/2 do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 22, 2025
  15. 1/2 gpg-interface: do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 22, 2025
  16. Christian CouderOct 22, 2025
  17. Bello OlamideOct 23, 2025
  18. 2/2 gpg-interface: do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 22, 2025
  19. Christian CouderOct 22, 2025
  20. Junio C HamanoOct 22, 2025
  21. Bello OlamideOct 23, 2025
  22. 0/2 do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 23, 2025
  23. 1/2 gpg-interface: do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 23, 2025
  24. 2/2 gpg-interface: do not use misdesigned strbuf_split*()Olamide Caleb Bello, Oct 23, 2025
  25. Junio C HamanoOct 23, 2025
  26. Christian CouderOct 24, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.