kernel32: Fix assumptions about 0-size output buffer in ntdll Unicode conversion functions.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2019-12-03 08:31:51 +01:00
parent 94d2b4742c
commit 9e8db5a27a
1 changed files with 18 additions and 3 deletions

View File

@ -273,10 +273,25 @@ DWORD FILE_name_WtoA( LPCWSTR src, INT srclen, LPSTR dest, INT destlen )
DWORD ret;
if (srclen < 0) srclen = strlenW( src ) + 1;
if (!AreFileApisANSI())
RtlUnicodeToOemN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) );
if (!destlen)
{
if (!AreFileApisANSI())
{
UNICODE_STRING strW;
strW.Buffer = (WCHAR *)src;
strW.Length = srclen * sizeof(WCHAR);
ret = RtlUnicodeStringToOemSize( &strW ) - 1;
}
else
RtlUnicodeToMultiByteSize( &ret, src, srclen * sizeof(WCHAR) );
}
else
RtlUnicodeToMultiByteN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) );
{
if (!AreFileApisANSI())
RtlUnicodeToOemN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) );
else
RtlUnicodeToMultiByteN( dest, destlen, &ret, src, srclen * sizeof(WCHAR) );
}
return ret;
}