Akihiro Sagawa : kernelbase: Use translated Unicode default char to check invalid chars.

Alexandre Julliard julliard at winehq.org
Mon Dec 16 16:47:55 CST 2019


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

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Mon Dec 16 22:39:41 2019 +0900

kernelbase: Use translated Unicode default char to check invalid chars.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48288
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/codepage.c | 3 +++
 dlls/kernelbase/locale.c       | 6 +++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c
index dc25c55652..2c081586f2 100644
--- a/dlls/kernel32/tests/codepage.c
+++ b/dlls/kernel32/tests/codepage.c
@@ -1005,12 +1005,15 @@ static void test_undefined_byte_char(void)
         LPCSTR str;
         BOOL is_error;
     } testset[] = {
+        {   37, "\x6f", FALSE },
         {  874, "\xdd", TRUE },
         {  932, "\xfe", TRUE },
         {  932, "\x80", FALSE },
+        {  932, "\x81\x45", FALSE },
         {  936, "\xff", TRUE },
         {  949, "\xff", TRUE },
         {  950, "\xff", TRUE },
+        { 1252, "?", FALSE },
         { 1252, "\x90", FALSE },
         { 1253, "\xaa", TRUE },
         { 1255, "\xff", TRUE },
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index fba15555d2..c250c97968 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -1044,12 +1044,12 @@ static int check_invalid_chars( const CPTABLEINFO *info, const unsigned char *sr
             {
                 if (srclen == 1) break;  /* partial char, error */
                 if (info->DBCSOffsets[off + src[1]] == info->UniDefaultChar &&
-                    ((src[0] << 8) | src[1]) != info->TransDefaultChar) break;
+                    ((src[0] << 8) | src[1]) != info->TransUniDefaultChar) break;
                 src++;
                 srclen--;
                 continue;
             }
-            if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar)
+            if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransUniDefaultChar)
                 break;
             if (is_private_use_area_char( info->MultiByteTable[*src] )) break;
         }
@@ -1058,7 +1058,7 @@ static int check_invalid_chars( const CPTABLEINFO *info, const unsigned char *sr
     {
         for ( ; srclen; src++, srclen-- )
         {
-            if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar)
+            if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransUniDefaultChar)
                 break;
             if (is_private_use_area_char( info->MultiByteTable[*src] )) break;
         }




More information about the wine-cvs mailing list