diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-07-11 15:16:49 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-11 15:16:49 -0700 |
commit | 0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a (patch) | |
tree | fc3b78100325d2f220f86ce5c4af848cbb5eb2ba /compat | |
parent | Merge branch 'sg/ci-brew-gcc-workaround' (diff) | |
parent | mingw: fix possible buffer overrun when calling `GetUserNameW()` (diff) | |
download | tgif-0a2ff7c6b5ec5e4301a9cfb3c0dd26590d70ad7a.tar.xz |
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
Diffstat (limited to 'compat')
-rw-r--r-- | compat/mingw.c | 12 | ||||
-rw-r--r-- | compat/poll/poll.c | 2 | ||||
-rw-r--r-- | compat/winansi.c | 10 |
3 files changed, 16 insertions, 8 deletions
diff --git a/compat/mingw.c b/compat/mingw.c index 433838391f..4891789771 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 8b07edb0fe..0e95dd493c 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 efc0abcdac..cacd82c833 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"); |