Author: ion
Date: Sun Oct 30 21:41:12 2011
New Revision: 54279
URL:
http://svn.reactos.org/svn/reactos?rev=54279&view=rev
Log:
[KERNEL32]: In failure cases we should return one more byte for ANSI_NULL as well. Also
fix another length check.
Modified:
trunk/reactos/dll/win32/kernel32/client/environ.c
Modified: trunk/reactos/dll/win32/kernel32/client/environ.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/environ.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/environ.c [iso-8859-1] Sun Oct 30 21:41:12
2011
@@ -457,8 +457,8 @@
Status = RtlExpandEnvironmentStrings_U(NULL, &SourceU, &DestU,
&Length);
if (NT_SUCCESS(Status))
{
- /* Get the ASCII length of the variable */
- Result = RtlUnicodeStringToAnsiSize(&DestU);
+ /* Get the ASCII length of the variable, add a byte for NULL */
+ Result = RtlUnicodeStringToAnsiSize(&DestU) + sizeof(ANSI_NULL);
}
}
else
@@ -475,16 +475,14 @@
/* Check the size */
Result = RtlUnicodeStringToAnsiSize(&DestU);
- if (Result <= nSize)
+ if (Result <= UniSize)
{
/* Convert the string */
RtlInitEmptyAnsiString(&Dest, lpDst, UniSize);
Status = RtlUnicodeStringToAnsiString(&Dest, &DestU, FALSE);
- if (!NT_SUCCESS(Status))
- {
- /* Clear the destination */
- *lpDst = ANSI_NULL;
- }
+
+ /* Write a NULL-char in case of failure only */
+ if (!NT_SUCCESS(Status)) *lpDst = ANSI_NULL;
}
}
Quickie: