fixed converting the unicode string back to ansi in GetNamedPipeHandleStateA, also check if memory allocation failed (reported by M Bealby in bug #1110)
Modified: trunk/reactos/lib/kernel32/file/npipe.c

Modified: trunk/reactos/lib/kernel32/file/npipe.c
--- trunk/reactos/lib/kernel32/file/npipe.c	2005-12-11 19:30:07 UTC (rev 20076)
+++ trunk/reactos/lib/kernel32/file/npipe.c	2005-12-11 19:36:43 UTC (rev 20077)
@@ -905,15 +905,19 @@
 			 LPSTR lpUserName,
 			 DWORD nMaxUserNameSize)
 {
-  UNICODE_STRING UserNameW;
+  UNICODE_STRING UserNameW = {0};
   ANSI_STRING UserNameA;
   BOOL Ret;
 
   if(lpUserName != NULL)
   {
-    UserNameW.Length = 0;
     UserNameW.MaximumLength = nMaxUserNameSize * sizeof(WCHAR);
-    UserNameW.Buffer = HeapAlloc(GetCurrentProcess(), 0, UserNameW.MaximumLength);
+    UserNameW.Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, UserNameW.MaximumLength);
+    if (UserNameW.Buffer == NULL)
+    {
+      SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+      return FALSE;
+    }
 
     UserNameA.Buffer = lpUserName;
     UserNameA.Length = 0;
@@ -930,7 +934,10 @@
 
   if(Ret && lpUserName != NULL)
   {
-    NTSTATUS Status = RtlUnicodeStringToAnsiString(&UserNameA, &UserNameW, FALSE);
+    NTSTATUS Status;
+
+    RtlInitUnicodeString(&UserNameW, UserNameW.Buffer);
+    Status = RtlUnicodeStringToAnsiString(&UserNameA, &UserNameW, FALSE);
     if(!NT_SUCCESS(Status))
     {
       SetLastErrorByStatus(Status);
@@ -940,7 +947,7 @@
 
   if(UserNameW.Buffer != NULL)
   {
-    HeapFree(GetCurrentProcess(), 0, UserNameW.Buffer);
+    RtlFreeHeap(RtlGetProcessHeap(), 0, UserNameW.Buffer);
   }
 
   return Ret;