Piotr Caban : msvcp90: Return required buffer size in _Strxfrm.

Alexandre Julliard julliard at winehq.org
Wed Feb 3 15:39:28 CST 2021


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Feb  3 11:56:29 2021 +0100

msvcp90: Return required buffer size in _Strxfrm.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcp90/locale.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 6b547c384a4..f968ce068ef 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -12663,7 +12663,8 @@ int __cdecl _To_wide(const char *src, wchar_t *dst)
     return MultiByteToWideChar(CP_ACP, 0, src, -1, dst, MAX_PATH);
 }
 
-size_t __cdecl _Strxfrm(char *dest, char *dest_end, const char *src, const char *src_end, _Collvec *coll)
+size_t __cdecl _Strxfrm(char *dest, char *dest_end,
+        const char *src, const char *src_end, _Collvec *coll)
 {
     size_t dest_len = dest_end - dest;
     size_t src_len = src_end - src;
@@ -12691,12 +12692,14 @@ size_t __cdecl _Strxfrm(char *dest, char *dest_end, const char *src, const char
     }
 
     len = MultiByteToWideChar(cv.page, MB_ERR_INVALID_CHARS, src, src_len, NULL, 0);
-    if (!len) return 0;
+    if (!len) return INT_MAX;
     buf = heap_alloc(len * sizeof(WCHAR));
-    if (!buf) return 0;
+    if (!buf) return INT_MAX;
     MultiByteToWideChar(cv.page, MB_ERR_INVALID_CHARS, src, src_len, buf, len);
 
-    len = LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, (WCHAR*)dest, dest_len);
+    len = LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, NULL, 0);
+    if (len <= dest_len)
+        LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, (WCHAR*)dest, dest_len);
     heap_free(buf);
     return len;
 }




More information about the wine-cvs mailing list