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

Alexandre Julliard julliard at winehq.org
Tue Dec 3 16:13:10 CST 2019


Module: wine
Branch: master
Commit: 9e8db5a27adae286025ff7ad1067386bba76da85
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9e8db5a27adae286025ff7ad1067386bba76da85

Author: Alexandre Julliard <julliard at 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 at 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;
 }
 




More information about the wine-cvs mailing list