summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-11 22:16:49 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-07-11 22:16:49 (GMT)
commit0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a (patch)
treefc3b78100325d2f220f86ce5c4af848cbb5eb2ba
parente1cee0b84335c2ad9ffbbcb96d34850eeb5f17fd (diff)
parent697bdd22b887a0778489814e44dcec850aa82ad0 (diff)
downloadgit-0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a.zip
git-0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a.tar.gz
git-0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a.tar.bz2
Merge branch 'js/mingw-use-utf8'
Windows update. * js/mingw-use-utf8: mingw: fix possible buffer overrun when calling `GetUserNameW()` mingw: use Unicode functions explicitly mingw: get pw_name in UTF-8 format
-rw-r--r--compat/mingw.c12
-rw-r--r--compat/poll/poll.c2
-rw-r--r--compat/winansi.c10
3 files changed, 16 insertions, 8 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 4338383..4891789 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1407,7 +1407,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
do_unset_environment_variables();
/* Determine whether or not we are associated to a console */
- cons = CreateFile("CONOUT$", GENERIC_WRITE,
+ cons = CreateFileW(L"CONOUT$", GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (cons == INVALID_HANDLE_VALUE) {
@@ -1949,13 +1949,19 @@ struct passwd *getpwuid(int uid)
static unsigned initialized;
static char user_name[100];
static struct passwd *p;
+ wchar_t buf[100];
DWORD len;
if (initialized)
return p;
- len = sizeof(user_name);
- if (!GetUserName(user_name, &len)) {
+ len = ARRAY_SIZE(buf);
+ if (!GetUserNameW(buf, &len)) {
+ initialized = 1;
+ return NULL;
+ }
+
+ if (xwcstoutf(user_name, buf, sizeof(user_name)) < 0) {
initialized = 1;
return NULL;
}
diff --git a/compat/poll/poll.c b/compat/poll/poll.c
index 8b07edb..0e95dd4 100644
--- a/compat/poll/poll.c
+++ b/compat/poll/poll.c
@@ -150,7 +150,7 @@ win32_compute_revents (HANDLE h, int *p_sought)
if (!once_only)
{
NtQueryInformationFile = (PNtQueryInformationFile)(void (*)(void))
- GetProcAddress (GetModuleHandle ("ntdll.dll"),
+ GetProcAddress (GetModuleHandleW (L"ntdll.dll"),
"NtQueryInformationFile");
once_only = TRUE;
}
diff --git a/compat/winansi.c b/compat/winansi.c
index efc0abc..cacd82c 100644
--- a/compat/winansi.c
+++ b/compat/winansi.c
@@ -608,7 +608,7 @@ int winansi_isatty(int fd)
void winansi_init(void)
{
int con1, con2;
- char name[32];
+ wchar_t name[32];
/* check if either stdout or stderr is a console output screen buffer */
con1 = is_console(1);
@@ -628,13 +628,15 @@ void winansi_init(void)
}
/* create a named pipe to communicate with the console thread */
- xsnprintf(name, sizeof(name), "\\\\.\\pipe\\winansi%lu", GetCurrentProcessId());
- hwrite = CreateNamedPipe(name, PIPE_ACCESS_OUTBOUND,
+ if (swprintf(name, ARRAY_SIZE(name) - 1, L"\\\\.\\pipe\\winansi%lu",
+ GetCurrentProcessId()) < 0)
+ die("Could not initialize winansi pipe name");
+ hwrite = CreateNamedPipeW(name, PIPE_ACCESS_OUTBOUND,
PIPE_TYPE_BYTE | PIPE_WAIT, 1, BUFFER_SIZE, 0, 0, NULL);
if (hwrite == INVALID_HANDLE_VALUE)
die_lasterr("CreateNamedPipe failed");
- hread = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
+ hread = CreateFileW(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hread == INVALID_HANDLE_VALUE)
die_lasterr("CreateFile for named pipe failed");