"Ge van Geldorp" <[email protected]> writes:

> @@ -1055,15 +1056,86 @@ BOOLEAN WINAPI GetComputerObjectNameW(
>  BOOLEAN WINAPI GetUserNameExA(
>    EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize)
>  {
> -    FIXME("%d %p %p\n", NameFormat, lpNameBuffer, nSize);
> -    return FALSE;
> +    BOOLEAN rc;
> +    LPWSTR bufferW = NULL;
> +    ULONG sizeW = *nSize;
> +    TRACE("(%d %p %p)\n", NameFormat, lpNameBuffer, nSize);
> +    if (lpNameBuffer) {
> +        bufferW = HeapAlloc(GetProcessHeap(), 0, sizeW * sizeof(WCHAR));
> +        if (bufferW == NULL) {
> +            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
> +            return FALSE;
> +        }
> +    }
> +    rc = GetUserNameExW(NameFormat, bufferW, &sizeW);
> +    if (rc && bufferW) {
> +        ULONG len = WideCharToMultiByte(CP_ACP, 0, bufferW, -1, NULL, 0, 
> NULL, NULL);
> +        WideCharToMultiByte(CP_ACP, 0, bufferW, -1, lpNameBuffer, *nSize, 
> NULL, NULL);
> +        *nSize = len;
> +    }

You need to check for buffer overflows and return the appropriate error,
preferably with test cases.

-- 
Alexandre Julliard
[email protected]


Reply via email to