From e24b445f1133800e1e4cce6ffabf15b596eed781 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Wed, 15 Apr 2009 15:32:04 +0000 Subject: [PATCH] - Revert r40484 svn path=/trunk/; revision=40527 --- reactos/dll/win32/kernel32/process/procsup.c | 26 ++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/kernel32/process/procsup.c b/reactos/dll/win32/kernel32/process/procsup.c index ff338793f30..d84384ab9ba 100644 --- a/reactos/dll/win32/kernel32/process/procsup.c +++ b/reactos/dll/win32/kernel32/process/procsup.c @@ -720,12 +720,34 @@ CreateProcessInternalW(HANDLE hToken, if (lpCurrentDirectory) { - if ((GetFileAttributesW(lpCurrentDirectory) == INVALID_FILE_ATTRIBUTES) || - !(GetFileAttributesW(lpCurrentDirectory) & FILE_ATTRIBUTE_DIRECTORY)) + LPWSTR FilePart, Buffer = NULL; + + Buffer = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + (MAX_PATH + 1) * sizeof(WCHAR)); + + if (!Buffer) { + SetLastErrorByStatus(STATUS_NO_MEMORY); + return FALSE; + } + + if (GetFullPathNameW(lpCurrentDirectory, MAX_PATH, Buffer, &FilePart) > MAX_PATH) + { + RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer); SetLastError(ERROR_DIRECTORY); return FALSE; } + + if ((GetFileAttributesW(Buffer) == INVALID_FILE_ATTRIBUTES) || + !(GetFileAttributesW(Buffer) & FILE_ATTRIBUTE_DIRECTORY)) + { + RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer); + SetLastError(ERROR_DIRECTORY); + return FALSE; + } + + RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer); } /*