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;