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