Alexandre Julliard : kernel32: Fix assumptions about 0-size output buffer in ntdll Unicode conversion functions.
Module: wine Branch: master Commit: 9e8db5a27adae286025ff7ad1067386bba76da85 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9e8db5a27adae286025ff7ad1... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Dec 3 08:31:51 2019 +0100 kernel32: Fix assumptions about 0-size output buffer in ntdll Unicode conversion functions. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/kernel32/file.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index ef94741093..4dbf17c898 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -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; }
participants (1)
-
Alexandre Julliard