git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch] credential-osxkeychain: Clear username_buffer before getting the converted C string.
@ 2024-07-31  3:41 Hong Jiang
  2024-07-31  7:42 ` Jeff King
  0 siblings, 1 reply; 7+ messages in thread
From: Hong Jiang @ 2024-07-31  3:41 UTC (permalink / raw)
  To: git

I encountered this problem with homebrew after I upgraded to macOS
12.7.5, but I am not sure the OS upgrade is the only reason.

After `brew upgrade`, I received the following message:

Error: invalid byte sequence in UTF-8
/usr/local/Homebrew/Library/Homebrew/utils/github/api.rb:182:in `[]'
/usr/local/Homebrew/Library/Homebrew/utils/github/api.rb:182:in `block
in keychain_username_password'

The related lines in api.rb are:

        git_credential_out, _, result = system_command "git",
                                                       args:
["credential-osxkeychain", "get"],
                                                       input:
["protocol=https\n", "host=github.com\n"],
                                                       env:          {
"HOME" => uid_home }.compact,
                                                       print_stderr: false
        return unless result.success?

        github_username = git_credential_out[/username=(.+)/, 1]
        github_password = git_credential_out[/password=(.+)/, 1]
        return unless github_username

So it looks like that git_credential_out has invalid UTF-8 byte
sequence. I print it after the system_command "git":

password=gho_SHADOWED
username=jdp1024��`
F�
capability[]=state
state[]=osxkeychain:seen=1

and

echo "protocol=https\nhost=github.com\n" | git credential-osxkeychain get

reproduced the problem.

So I made the patch, which zeros the username_buf before retrieving
the converted C string.

From: Jiang Hong <ilford@gmail.com>
Date: Wed, 31 Jul 2024 11:05:44 +0800
Subject: [PATCH] Zeroing username_buffer before retrieving the
converted C string.

In macOS 12.7.5 and 12.7.6, the uninitialized username_buffer receives
a non-NULL-terminated C string.
---
 contrib/credential/osxkeychain/git-credential-osxkeychain.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/contrib/credential/osxkeychain/git-credential-osxkeychain.c
b/contrib/credential/osxkeychain/git-credential-osxkeychain.c
index 6ce22a28ed..89cd575bd5 100644
--- a/contrib/credential/osxkeychain/git-credential-osxkeychain.c
+++ b/contrib/credential/osxkeychain/git-credential-osxkeychain.c
@@ -137,6 +137,7 @@ static void find_username_in_item(CFDictionaryRef item)
  buffer_len = CFStringGetMaximumSizeForEncoding(
  CFStringGetLength(account_ref), ENCODING) + 1;
  username_buf = xmalloc(buffer_len);
+ memset(username_buf, 0, buffer_len);
  if (CFStringGetCString(account_ref,
  username_buf,
  buffer_len,
-- 
2.37.1 (Apple Git-137.1)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-08-01 15:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-31  3:41 [patch] credential-osxkeychain: Clear username_buffer before getting the converted C string Hong Jiang
2024-07-31  7:42 ` Jeff King
2024-07-31 13:07   ` Bo Anderson
2024-08-01  8:25     ` [PATCH] credential/osxkeychain: respect NUL terminator in username Jeff King
2024-08-01 10:57       ` Hong Jiang
2024-08-01 11:14         ` Jeff King
2024-08-01 15:54         ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).