From: Akihiro Sagawa Subject: [PATCH] vbscript: Support non-Latin 1 characters in Asc. Message-Id: <20200912163622.715C.375B48EC@gmail.com> Date: Sat, 12 Sep 2020 16:38:56 +0900 Wine-Bugs: https://bugs.winehq.org/show_bug.cgi?id=49309 Signed-off-by: Akihiro Sagawa --- dlls/vbscript/global.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 80323fe136..e6e84da4d3 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -1749,10 +1749,27 @@ static HRESULT Global_Asc(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA str = conv_str; } - if(!SysStringLen(str) || *str >= 0x100) + if(!SysStringLen(str)) hres = MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL); - else if(res) - hres = return_short(res, *str); + else { + unsigned char buf[2]; + short val = 0; + int n = WideCharToMultiByte(CP_ACP, 0, str, 1, (char*)buf, sizeof(buf), NULL, NULL); + switch(n) { + case 1: + val = buf[0]; + break; + case 2: + val = (buf[0] << 8) | buf[1]; + break; + default: + WARN("Failed to convert %x\n", *str); + hres = E_FAIL; + } + if(res && SUCCEEDED(hres)) + hres = return_short(res, val); + } + SysFreeString(conv_str); return hres; }