{"thread":{"id":"44725","subject":"[PATCH] mingw: consider that UNICODE_STRING::Length counts bytes","startedAt":"2016-12-17T13:28:47Z","lastAt":"2016-12-17T13:28:47Z","messageCount":1,"participants":["Max Kirillov"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"307955","messageId":"1481980831-18511-1-git-send-email-max@max630.net","threadId":"44725","inReplyTo":null,"subject":"[PATCH] mingw: consider that UNICODE_STRING::Length counts bytes","fromName":"Max Kirillov","fromEmail":"max@max630.net","sentAt":"2016-12-17T13:20:31Z","receivedAt":"2016-12-17T13:28:47Z","isPatch":true,"sender":{"key":"max@max630.net","avatar":"https://avatars.githubusercontent.com/u/381560?v=4"},"body":"UNICODE_STRING::Length field means size of buffer in bytes[1], despite of buffer\nitself being array of wchar_t. Because of that terminating zero is placed twice\nas far. Fix it.\n\n[1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa380518.aspx\n\nSigned-off-by: Max Kirillov <max@max630.net>\n---\nAccess outside of buffer was very unlikely (for that user needed to redirect\nstandard fd to a file with path longer than ~250 symbols), it still did not\nseem to do any harm, and otherwise it did not break because only substring is\nchecked, but it was still incorrect.\n compat/winansi.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/compat/winansi.c b/compat/winansi.c\nindex 3be60ce..6b4f736 100644\n--- a/compat/winansi.c\n+++ b/compat/winansi.c\n@@ -553,7 +553,7 @@ static void detect_msys_tty(int fd)\n \t\t\tbuffer, sizeof(buffer) - 2, &result)))\n \t\treturn;\n \tname = nameinfo->Name.Buffer;\n-\tname[nameinfo->Name.Length] = 0;\n+\tname[nameinfo->Name.Length / sizeof(*name)] = 0;\n \n \t/* check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX') */\n \tif (!wcsstr(name, L\"msys-\") || !wcsstr(name, L\"-pty\"))\n-- \n2.3.4.2801.g3d0809b\n\n"}]}