Commit c6083037 authored by Alexandre Julliard's avatar Alexandre Julliard

kernel32: Make sure the string is properly terminated in QueryFullProcessImageNameW.

parent b485ed23
...@@ -3158,10 +3158,11 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp ...@@ -3158,10 +3158,11 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp
RtlInitUnicodeStringEx(&nt_path, NULL); RtlInitUnicodeStringEx(&nt_path, NULL);
/* FIXME: On Windows, ProcessImageFileName return an NT path. We rely that it being a DOS path, /* FIXME: On Windows, ProcessImageFileName return an NT path. We rely that it being a DOS path,
* as this is on Wine. */ * as this is on Wine. */
status = NtQueryInformationProcess(hProcess, ProcessImageFileName, buffer, sizeof(buffer), &needed); status = NtQueryInformationProcess(hProcess, ProcessImageFileName, buffer,
sizeof(buffer) - sizeof(WCHAR), &needed);
if (status == STATUS_INFO_LENGTH_MISMATCH) if (status == STATUS_INFO_LENGTH_MISMATCH)
{ {
dynamic_buffer = HeapAlloc(GetProcessHeap(), 0, needed); dynamic_buffer = HeapAlloc(GetProcessHeap(), 0, needed + sizeof(WCHAR));
status = NtQueryInformationProcess(hProcess, ProcessImageFileName, (LPBYTE)dynamic_buffer, needed, &needed); status = NtQueryInformationProcess(hProcess, ProcessImageFileName, (LPBYTE)dynamic_buffer, needed, &needed);
result = dynamic_buffer; result = dynamic_buffer;
} }
...@@ -3172,6 +3173,7 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp ...@@ -3172,6 +3173,7 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp
if (dwFlags & PROCESS_NAME_NATIVE) if (dwFlags & PROCESS_NAME_NATIVE)
{ {
result->Buffer[result->Length / sizeof(WCHAR)] = 0;
if (!RtlDosPathNameToNtPathName_U(result->Buffer, &nt_path, NULL, NULL)) if (!RtlDosPathNameToNtPathName_U(result->Buffer, &nt_path, NULL, NULL))
{ {
status = STATUS_OBJECT_PATH_NOT_FOUND; status = STATUS_OBJECT_PATH_NOT_FOUND;
...@@ -3186,8 +3188,9 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp ...@@ -3186,8 +3188,9 @@ BOOL WINAPI QueryFullProcessImageNameW(HANDLE hProcess, DWORD dwFlags, LPWSTR lp
goto cleanup; goto cleanup;
} }
lstrcpynW(lpExeName, result->Buffer, result->Length/sizeof(WCHAR) + 1);
*pdwSize = result->Length/sizeof(WCHAR); *pdwSize = result->Length/sizeof(WCHAR);
memcpy( lpExeName, result->Buffer, result->Length );
lpExeName[*pdwSize] = 0;
cleanup: cleanup:
HeapFree(GetProcessHeap(), 0, dynamic_buffer); HeapFree(GetProcessHeap(), 0, dynamic_buffer);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment