Alexandre Julliard : kernelbase: Use RtlMultiByteToUnicodeN in IsChar* functions.
Module: wine Branch: master Commit: 23834ee3b8d0a3d73eed593404748abd7d29d0d9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=23834ee3b8d0a3d73eed59340... Author: Alexandre Julliard <julliard(a)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(a)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); }
participants (1)
-
Alexandre Julliard