There are no errors when running chr(-1) in utf-8 locale.
From: Robert Wilhelm robert.wilhelm@gmx.net
There are no errors when running chr(-1) in utf-8 locale.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54003 --- dlls/vbscript/tests/api.vbs | 2 +- dlls/vbscript/tests/run.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 459d3ace33e..224d7ffa03f 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -150,7 +150,7 @@ Call ok(Chr("120") = "x", "Chr(""120"") = " & Chr("120")) sub testChrError on error resume next
- if isEnglishLang then + if isEnglishLang and not isUTF8 then call Err.clear() call Chr(-1) call ok(Err.number = 5, "Err.number = " & Err.number) diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c index 022d714dea5..58001999bce 100644 --- a/dlls/vbscript/tests/run.c +++ b/dlls/vbscript/tests/run.c @@ -147,6 +147,7 @@ DEFINE_EXPECT(OnLeaveScript); #define DISPID_GLOBAL_UNKOBJ 1026 #define DISPID_GLOBAL_THROWEXCEPTION 1027 #define DISPID_GLOBAL_ISARRAYFIXED 1028 +#define DISPID_GLOBAL_ISUTF8 1029
#define DISPID_TESTOBJ_PROPGET 2000 #define DISPID_TESTOBJ_PROPPUT 2001 @@ -157,7 +158,7 @@ DEFINE_EXPECT(OnLeaveScript); #define FACILITY_VBS 0xa #define MAKE_VBSERROR(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_VBS, code)
-static BOOL strict_dispid_check, is_english, allow_ui; +static BOOL strict_dispid_check, is_english, allow_ui, is_utf8; static int first_day_of_week; static const char *test_name = "(null)"; static int test_counter; @@ -229,6 +230,7 @@ static const char *vt2a(VARIANT *v) */ static void detect_locale(void) { + CPINFOEXA cpinfo; HMODULE kernel32 = GetModuleHandleA("kernel32.dll"); LANGID (WINAPI *pGetThreadUILanguage)(void) = (void*)GetProcAddress(kernel32, "GetThreadUILanguage");
@@ -236,6 +238,9 @@ static void detect_locale(void) PRIMARYLANGID(GetUserDefaultUILanguage()) == LANG_ENGLISH && PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH);
+ GetCPInfoExA( CP_ACP, 0, &cpinfo ); + is_utf8 = cpinfo.CodePage == CP_UTF8; + GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IFIRSTDAYOFWEEK | LOCALE_RETURN_NUMBER, (void*)&first_day_of_week, sizeof(first_day_of_week)); first_day_of_week = 1 + (first_day_of_week + 1) % 7; @@ -1142,6 +1147,7 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD { L"reportSuccess", DISPID_GLOBAL_REPORTSUCCESS, REF_EXPECT(global_success_d) }, { L"getVT", DISPID_GLOBAL_GETVT }, { L"isEnglishLang", DISPID_GLOBAL_ISENGLANG }, + { L"isUTF8", DISPID_GLOBAL_ISUTF8 }, { L"firstDayOfWeek", DISPID_GLOBAL_WEEKSTARTDAY }, { L"globalCallback", DISPID_GLOBAL_GLOBALCALLBACK }, { L"testObj", DISPID_GLOBAL_TESTOBJ }, @@ -1264,6 +1270,11 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, V_BOOL(pvarRes) = is_english ? VARIANT_TRUE : VARIANT_FALSE; return S_OK;
+ case DISPID_GLOBAL_ISUTF8: + V_VT(pvarRes) = VT_BOOL; + V_BOOL(pvarRes) = is_utf8 ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; + case DISPID_GLOBAL_WEEKSTARTDAY: V_VT(pvarRes) = VT_I4; V_I4(pvarRes) = first_day_of_week;
We probably could remove isEnglishLang check, and use something more generic, based on CP properties.