Author: mjansen Date: Tue May 30 20:57:45 2017 New Revision: 74702 URL: http://svn.reactos.org/svn/reactos?rev=74702&view=rev Log: [KERNEL32] Do not use TEB->StaticUnicodeString in CreateProcessInternalA. CORE-10368
Modified: trunk/reactos/dll/win32/kernel32/client/proc.c Modified: trunk/reactos/dll/win32/kernel32/client/proc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/proc.c?rev=74702&r1=74701&r2=74702&view=diff ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/proc.c [iso-8859-1] Tue May 30 20:57:45 2017 @@ -4660,9 +4660,7 @@ LPPROCESS_INFORMATION lpProcessInformation, PHANDLE hNewToken) { - PUNICODE_STRING CommandLine = NULL; - UNICODE_STRING DummyString; - UNICODE_STRING LiveCommandLine; + UNICODE_STRING CommandLine; UNICODE_STRING ApplicationName; UNICODE_STRING CurrentDirectory; BOOL bRetVal; @@ -4677,8 +4675,7 @@ RtlMoveMemory(&StartupInfo, lpStartupInfo, sizeof(*lpStartupInfo)); /* Initialize all strings to nothing */ - LiveCommandLine.Buffer = NULL; - DummyString.Buffer = NULL; + CommandLine.Buffer = NULL; ApplicationName.Buffer = NULL; CurrentDirectory.Buffer = NULL; StartupInfo.lpDesktop = NULL; @@ -4688,24 +4685,8 @@ /* Convert the Command line */ if (lpCommandLine) { - /* If it's too long, then we'll have a problem */ - if ((strlen(lpCommandLine) + 1) * sizeof(WCHAR) < - NtCurrentTeb()->StaticUnicodeString.MaximumLength) - { - /* Cache it in the TEB */ - CommandLine = Basep8BitStringToStaticUnicodeString(lpCommandLine); - } - else - { - /* Use a dynamic version */ - Basep8BitStringToDynamicUnicodeString(&LiveCommandLine, - lpCommandLine); - } - } - else - { - /* The logic below will use CommandLine, so we must make it valid */ - CommandLine = &DummyString; + Basep8BitStringToDynamicUnicodeString(&CommandLine, + lpCommandLine); } /* Convert the Name and Directory */ @@ -4740,8 +4721,7 @@ /* Call the Unicode function */ bRetVal = CreateProcessInternalW(hToken, ApplicationName.Buffer, - LiveCommandLine.Buffer ? - LiveCommandLine.Buffer : CommandLine->Buffer, + CommandLine.Buffer, lpProcessAttributes, lpThreadAttributes, bInheritHandles, @@ -4754,7 +4734,7 @@ /* Clean up */ RtlFreeUnicodeString(&ApplicationName); - RtlFreeUnicodeString(&LiveCommandLine); + RtlFreeUnicodeString(&CommandLine); RtlFreeUnicodeString(&CurrentDirectory); RtlFreeHeap(RtlGetProcessHeap(), 0, StartupInfo.lpDesktop); RtlFreeHeap(RtlGetProcessHeap(), 0, StartupInfo.lpReserved);