Module: wine Branch: master Commit: 23834ee3b8d0a3d73eed593404748abd7d29d0d9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=23834ee3b8d0a3d73eed59340...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Apr 11 17:01:36 2022 +0200
kernelbase: Use RtlMultiByteToUnicodeN in IsChar* functions.
In case the Ansi codepage was set to UTF-8.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/locale.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index 54d4a838731..1e477a449e1 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -5580,8 +5580,10 @@ INT WINAPI DECLSPEC_HOTPATCH IdnToUnicode( DWORD flags, const WCHAR *src, INT sr */ BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaA( CHAR c ) { - WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c]; - return !!(get_char_type( CT_CTYPE1, wc ) & C1_ALPHA); + WCHAR wc; + DWORD reslen; + RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 ); + return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_ALPHA); }
@@ -5599,8 +5601,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaW( WCHAR wc ) */ BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericA( CHAR c ) { - WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c]; - return !!(get_char_type( CT_CTYPE1, wc ) & (C1_ALPHA | C1_DIGIT)); + WCHAR wc; + DWORD reslen; + RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 ); + return reslen && (get_char_type( CT_CTYPE1, wc ) & (C1_ALPHA | C1_DIGIT)); }
@@ -5645,8 +5649,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharDigitW( WCHAR wc ) */ BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerA( CHAR c ) { - WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c]; - return !!(get_char_type( CT_CTYPE1, wc ) & C1_LOWER); + WCHAR wc; + DWORD reslen; + RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 ); + return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_LOWER); }
@@ -5673,8 +5679,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharPunctW( WCHAR wc ) */ BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceA( CHAR c ) { - WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c]; - return !!(get_char_type( CT_CTYPE1, wc ) & C1_SPACE); + WCHAR wc; + DWORD reslen; + RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 ); + return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_SPACE); }
@@ -5692,8 +5700,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceW( WCHAR wc ) */ BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperA( CHAR c ) { - WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c]; - return !!(get_char_type( CT_CTYPE1, wc ) & C1_UPPER); + WCHAR wc; + DWORD reslen; + RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 ); + return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_UPPER); }