Alexandre Julliard : kernelbase: Use RtlMultiByteToUnicodeN in IsChar* functions.

Alexandre Julliard julliard at winehq.org
Mon Apr 11 15:54:59 CDT 2022


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

Author: Alexandre Julliard <julliard at 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 at 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);
 }
 
 




More information about the wine-cvs mailing list