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