Module: wine Branch: master Commit: 7c5b40ed2ac6b1a82418d5da71b5968dd7c3c1b8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=7c5b40ed2ac6b1a82418d5da7...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Feb 3 11:56:29 2021 +0100
msvcp90: Return required buffer size in _Strxfrm.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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; }