[KERNEL32]

Fix GetEnvironmentStringsA/W.
See issue #6633 for more details.

svn path=/trunk/; revision=54282
This commit is contained in:
Kamil Hornicek 2011-11-02 20:10:02 +00:00
parent 09de8a1431
commit b9abf0ef06

View file

@ -294,18 +294,18 @@ GetEnvironmentStringsA(VOID)
do do
{ {
p += wcslen(Environment) + 1; p += wcslen(p) + 1;
} while (*p); } while (*p);
Length = p - Environment + sizeof(UNICODE_NULL); Length = p - Environment + 1;
Status = RtlUnicodeToMultiByteSize(&Size, Environment, Length); Status = RtlUnicodeToMultiByteSize(&Size, Environment, Length * sizeof(WCHAR));
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Size); Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Size);
if (Buffer) if (Buffer)
{ {
Status = RtlUnicodeToOemN(Buffer, Size, 0, Environment, Length); Status = RtlUnicodeToOemN(Buffer, Size, 0, Environment, Length * sizeof(WCHAR));
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer); RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
@ -344,15 +344,15 @@ GetEnvironmentStringsW(VOID)
do do
{ {
p += wcslen(Environment) + 1; p += wcslen(p) + 1;
} while (*p); } while (*p);
Length = p - Environment + sizeof(UNICODE_NULL); Length = p - Environment + 1;
p = RtlAllocateHeap(RtlGetProcessHeap(), 0, Length); p = RtlAllocateHeap(RtlGetProcessHeap(), 0, Length * sizeof(WCHAR));
if (p) if (p)
{ {
RtlCopyMemory(p, Environment, Length); RtlCopyMemory(p, Environment, Length * sizeof(WCHAR));
} }
else else
{ {